chiark / gitweb /
util: introduce cunescape_length()
authorLennart Poettering <lennart@poettering.net>
Wed, 7 Jul 2010 18:58:02 +0000 (20:58 +0200)
committerLennart Poettering <lennart@poettering.net>
Wed, 7 Jul 2010 18:58:02 +0000 (20:58 +0200)
src/util.c
src/util.h

index 58b96aec68f88fd8f09e9364a1f088cc8b153c8e..5103cc6ce24fefb5846c9bcb958cf58148d79378 100644 (file)
@@ -1129,7 +1129,7 @@ char *cescape(const char *s) {
         return r;
 }
 
-char *cunescape(const char *s) {
+char *cunescape_length(const char *s, size_t length) {
         char *r, *t;
         const char *f;
 
@@ -1137,10 +1137,10 @@ char *cunescape(const char *s) {
 
         /* Undoes C style string escaping */
 
-        if (!(r = new(char, strlen(s)+1)))
+        if (!(r = new(char, length+1)))
                 return r;
 
-        for (f = s, t = r; *f; f++) {
+        for (f = s, t = r; f < s + length; f++) {
 
                 if (*f != '\\') {
                         *(t++) = *f;
@@ -1242,6 +1242,9 @@ finish:
         return r;
 }
 
+char *cunescape(const char *s) {
+        return cunescape_length(s, strlen(s));
+}
 
 char *xescape(const char *s, const char *bad) {
         char *r, *t;
index fed0e670ef97dec420fd0c2294dfa5dda0c75044..ff79583d809803605d4eca1f023fbbb91088a07c 100644 (file)
@@ -222,6 +222,12 @@ int undecchar(char c);
 
 char *cescape(const char *s);
 char *cunescape(const char *s);
+char *cunescape_length(const char *s, size_t length);
+
+char *xescape(const char *s, const char *bad);
+
+char *bus_path_escape(const char *s);
+char *bus_path_unescape(const char *s);
 
 char *path_kill_slashes(char *path);
 
@@ -230,11 +236,6 @@ bool path_equal(const char *a, const char *b);
 
 char *ascii_strlower(char *path);
 
-char *xescape(const char *s, const char *bad);
-
-char *bus_path_escape(const char *s);
-char *bus_path_unescape(const char *s);
-
 bool ignore_file(const char *filename);
 
 bool chars_intersect(const char *a, const char *b);