summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaroslav Kysela <perex@perex.cz>2021-05-18 13:02:56 +0200
committerJaroslav Kysela <perex@perex.cz>2021-05-18 13:17:13 +0200
commit8eaa03b7c9bacf1dd9883408e2dbe4a31d3173f6 (patch)
tree2155b1c340d4699022ad85bfaaf31300113cd7d9
parent0ee4642a693fd2211e05a1e009398c8ebc5dde85 (diff)
downloadalsa-lib-8eaa03b7c9bacf1dd9883408e2dbe4a31d3173f6.tar.gz
conf: print quoted string more wisely
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
-rw-r--r--src/conf.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/conf.c b/src/conf.c
index 5c977266..d66e186d 100644
--- a/src/conf.c
+++ b/src/conf.c
@@ -1508,6 +1508,7 @@ static int parse_defs(snd_config_t *parent, input_t *input, int skip, int overri
static void string_print(char *str, int id, snd_output_t *out)
{
+ int q;
unsigned char *p = (unsigned char *)str;
if (!p || !*p) {
snd_output_puts(out, "''");
@@ -1549,7 +1550,8 @@ static void string_print(char *str, int id, snd_output_t *out)
snd_output_puts(out, str);
return;
quoted:
- snd_output_putc(out, '\'');
+ q = strchr(str, '\'') ? '"' : '\'';
+ snd_output_putc(out, q);
p = (unsigned char *)str;
while (*p) {
int c;
@@ -1579,20 +1581,21 @@ static void string_print(char *str, int id, snd_output_t *out)
snd_output_putc(out, '\\');
snd_output_putc(out, 'f');
break;
- case '\'':
- snd_output_putc(out, '\\');
- snd_output_putc(out, c);
- break;
default:
- if (c >= 32 && c <= 126 && c != '\'')
+ if (c == q) {
+ snd_output_putc(out, '\\');
snd_output_putc(out, c);
- else
- snd_output_printf(out, "\\%04o", c);
+ } else {
+ if (c >= 32 && c <= 126)
+ snd_output_putc(out, c);
+ else
+ snd_output_printf(out, "\\%04o", c);
+ }
break;
}
p++;
}
- snd_output_putc(out, '\'');
+ snd_output_putc(out, q);
}
static void level_print(snd_output_t *out, unsigned int level)