X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Futil.c;h=a01229e659f3906e7191675963b5d0e7c3320534;hb=1e3ad081efda42dd1cc737ce7e98be8889c78340;hp=58b96aec68f88fd8f09e9364a1f088cc8b153c8e;hpb=0bab36f250cc79776954fd6066c1e2a33f64c016;p=elogind.git diff --git a/src/util.c b/src/util.c index 58b96aec6..a01229e65 100644 --- a/src/util.c +++ b/src/util.c @@ -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; @@ -1182,6 +1182,11 @@ char *cunescape(const char *s) { *(t++) = '\''; break; + case 's': + /* This is an extension of the XDG syntax files */ + *(t++) = ' '; + break; + case 'x': { /* hexadecimal encoding */ int a, b; @@ -1242,6 +1247,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;