summaryrefslogtreecommitdiff
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
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().
-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':