summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxhe <xw897002528@gmail.com>2018-11-28 15:04:36 +0800
committerrofl0r <retnyg@gmx.net>2019-01-16 02:38:18 +0000
commit98bd054905c761ae48b1c912a797e45986870d35 (patch)
tree2abf5efc79016b7e179002fb1906d96fa842e042
parent314acc1a126a120bc3a74d071015c393b9ae86b8 (diff)
downloadgettext-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.c8
-rw-r--r--src/StringEscape.h4
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