summaryrefslogtreecommitdiff
path: root/src/StringEscape.c
diff options
context:
space:
mode:
authorxhe <xw897002528@gmail.com>2018-12-04 00:20:45 +0800
committerrofl0r <retnyg@gmx.net>2019-01-16 02:38:18 +0000
commit5606beeb455961ca1ce5f89595cb738f71d4d253 (patch)
treea2c7c09f79eff74a51b0b65de7a8b1682b434d81 /src/StringEscape.c
parentfb2a6a3b113315b1917af91c99a39321c72c1857 (diff)
downloadgettext-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.c18
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':