chiark / gitweb /
first attempt at proper service/socket logic
[elogind.git] / conf-parser.c
index 2ea6911257db25ab302c5af7b20ffee3dfbeea9b..26188583310e1d62e87f8e72e66fe965b34cc3b8 100644 (file)
@@ -337,6 +337,36 @@ int config_parse_string(
         return 0;
 }
 
         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,
 
 int config_parse_strv(
                 const char *filename,
@@ -360,7 +390,7 @@ int config_parse_strv(
         assert(data);
 
         k = strv_length(*sv);
         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)))
                 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];
 
         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;
 
                 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]);
 fail:
         for (; k > 0; k--)
                 free(n[k-1]);
+        free(n);
 
         return -ENOMEM;
 }
 
         return -ENOMEM;
 }