diff options
author | xhe <xw897002528@gmail.com> | 2018-11-28 15:04:36 +0800 |
---|---|---|
committer | rofl0r <retnyg@gmx.net> | 2019-01-16 02:38:18 +0000 |
commit | 98bd054905c761ae48b1c912a797e45986870d35 (patch) | |
tree | 2abf5efc79016b7e179002fb1906d96fa842e042 | |
parent | 314acc1a126a120bc3a74d071015c393b9ae86b8 (diff) | |
download | gettext-tiny-98bd054905c761ae48b1c912a797e45986870d35.tar.gz |
stringescape: correct break condition of unescape
unescape only makes the string shorter, so 1 byte for terminator 'NULL'
is enough. also, i tidy the code a little.
-rw-r--r-- | src/StringEscape.c | 8 | ||||
-rw-r--r-- | src/StringEscape.h | 4 |
2 files changed, 7 insertions, 5 deletions
diff --git a/src/StringEscape.c b/src/StringEscape.c index 233664a..70d8040 100644 --- a/src/StringEscape.c +++ b/src/StringEscape.c @@ -1,4 +1,6 @@ #include <stddef.h> +#include <assert.h> +#include <stdlib.h> //FIXME out gets silently truncated if outsize is too small @@ -56,11 +58,10 @@ size_t escape(char* in, char* out, size_t outsize) { *out = 0; return l; } -#include <assert.h> -#include <stdlib.h> + size_t unescape(char* in, char *out, size_t outsize) { size_t l = 0; - while(*in && l + 2 < outsize) { + while(*in && l + 1 < outsize) { switch (*in) { case '\\': ++in; @@ -114,4 +115,3 @@ size_t unescape(char* in, char *out, size_t outsize) { *out = 0; return l; } - diff --git a/src/StringEscape.h b/src/StringEscape.h index fc76482..296b48a 100644 --- a/src/StringEscape.h +++ b/src/StringEscape.h @@ -1,7 +1,9 @@ #ifndef STRINGESCAPE_H #define STRINGESCAPE_H + #include <stddef.h> + size_t escape(char* in, char *out, size_t outsize); size_t unescape(char* in, char *out, size_t outsize); -//RcB: DEP "StringEscape.c" + #endif |