diff options
author | Jaroslav Kysela <perex@perex.cz> | 2021-05-18 13:02:56 +0200 |
---|---|---|
committer | Jaroslav Kysela <perex@perex.cz> | 2021-05-18 13:17:13 +0200 |
commit | 8eaa03b7c9bacf1dd9883408e2dbe4a31d3173f6 (patch) | |
tree | 2155b1c340d4699022ad85bfaaf31300113cd7d9 | |
parent | 0ee4642a693fd2211e05a1e009398c8ebc5dde85 (diff) | |
download | alsa-lib-8eaa03b7c9bacf1dd9883408e2dbe4a31d3173f6.tar.gz |
conf: print quoted string more wisely
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
-rw-r--r-- | src/conf.c | 21 |
1 files changed, 12 insertions, 9 deletions
@@ -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) |