diff options
author | xhe <xw897002528@gmail.com> | 2018-12-04 00:20:45 +0800 |
---|---|---|
committer | rofl0r <retnyg@gmx.net> | 2019-01-16 02:38:18 +0000 |
commit | 5606beeb455961ca1ce5f89595cb738f71d4d253 (patch) | |
tree | a2c7c09f79eff74a51b0b65de7a8b1682b434d81 /src/StringEscape.c | |
parent | fb2a6a3b113315b1917af91c99a39321c72c1857 (diff) | |
download | gettext-tiny-5606beeb455961ca1ce5f89595cb738f71d4d253.tar.gz |
stringescape: add missing escape chars to escape()
escape() should handle '\b' and '\a' as well. also, escape() execute
some wrong actions. like transform '\?' into '\\\?', which should be
'\\?'.
specially, we do not need to en/decode ['] into [\\\']. but for safety,
still keep that in unescape().
Diffstat (limited to 'src/StringEscape.c')
-rw-r--r-- | src/StringEscape.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/StringEscape.c b/src/StringEscape.c index 70d8040..aabf1af 100644 --- a/src/StringEscape.c +++ b/src/StringEscape.c @@ -36,17 +36,27 @@ size_t escape(char* in, char* out, size_t outsize) { case '\v': *out++ = '\\'; l++; - *out = '\v'; + *out = 'v'; break; case '\?': *out++ = '\\'; l++; - *out = '\?'; + *out = '?'; break; case '\f': *out++ = '\\'; l++; - *out = '\f'; + *out = 'f'; + break; + case '\b': + *out++ = '\\'; + l++; + *out = 'b'; + break; + case '\a': + *out++ = '\\'; + l++; + *out = 'a'; break; default: *out = *in; @@ -85,7 +95,7 @@ size_t unescape(char* in, char *out, size_t outsize) { case 'v': *out='\v'; break; - case '\?': + case '?': *out = '\?'; break; case 'f': |