X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=conf-parser.c;fp=conf-parser.c;h=26188583310e1d62e87f8e72e66fe965b34cc3b8;hp=2ea6911257db25ab302c5af7b20ffee3dfbeea9b;hb=034c6ed7da5e44bfdde5a5d0da75f7b7a59953b8;hpb=9152c765065184d0c1267ed2499e3fe4cac53755 diff --git a/conf-parser.c b/conf-parser.c index 2ea691125..261885833 100644 --- a/conf-parser.c +++ b/conf-parser.c @@ -337,6 +337,36 @@ int config_parse_string( return 0; } +int config_parse_path( + const char *filename, + unsigned line, + const char *section, + const char *lvalue, + const char *rvalue, + void *data, + void *userdata) { + + char **s = data; + char *n; + + assert(filename); + assert(lvalue); + assert(rvalue); + assert(data); + + if (*rvalue != '/') { + log_error("[%s:%u] Not an absolute path: %s", filename, line, rvalue); + return -EINVAL; + } + + if (!(n = strdup(rvalue))) + return -ENOMEM; + + free(*s); + *s = n; + + return 0; +} int config_parse_strv( const char *filename, @@ -360,7 +390,7 @@ int config_parse_strv( assert(data); k = strv_length(*sv); - FOREACH_WORD(w, &l, rvalue, state) + FOREACH_WORD_QUOTED(w, l, rvalue, state) k++; if (!(n = new(char*, k+1))) @@ -368,7 +398,7 @@ int config_parse_strv( for (k = 0; (*sv)[k]; k++) n[k] = (*sv)[k]; - FOREACH_WORD(w, &l, rvalue, state) + FOREACH_WORD_QUOTED(w, l, rvalue, state) if (!(n[k++] = strndup(w, l))) goto fail; @@ -381,6 +411,7 @@ int config_parse_strv( fail: for (; k > 0; k--) free(n[k-1]); + free(n); return -ENOMEM; }