chiark / gitweb /
path: support specifier resolvin in .path units
[elogind.git] / src / core / load-fragment.c
index 0d5d841429aeaaae1a4212f05a06a44ff365d8ea..93f051af470ec8ab8f81c08c98b050acb150f86a 100644 (file)
@@ -186,7 +186,7 @@ int config_parse_unit_path_printf(
 
         k = unit_full_printf(u, rvalue);
         if (!k)
 
         k = unit_full_printf(u, rvalue);
         if (!k)
-                return -ENOMEM;
+                return log_oom();
 
         r = config_parse_path(filename, line, section, lvalue, ltype, k, data, userdata);
         free(k);
 
         r = config_parse_path(filename, line, section, lvalue, ltype, k, data, userdata);
         free(k);
@@ -1193,32 +1193,36 @@ int config_parse_path_spec(
         Path *p = data;
         PathSpec *s;
         PathType b;
         Path *p = data;
         PathSpec *s;
         PathType b;
+        char *k;
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
         assert(data);
 
 
         assert(filename);
         assert(lvalue);
         assert(rvalue);
         assert(data);
 
-        if ((b = path_type_from_string(lvalue)) < 0) {
+        b = path_type_from_string(lvalue);
+        if (b < 0) {
                 log_error("[%s:%u] Failed to parse path type, ignoring: %s", filename, line, lvalue);
                 return 0;
         }
 
                 log_error("[%s:%u] Failed to parse path type, ignoring: %s", filename, line, lvalue);
                 return 0;
         }
 
-        if (!path_is_absolute(rvalue)) {
-                log_error("[%s:%u] Path is not absolute, ignoring: %s", filename, line, rvalue);
+        k = unit_full_printf(UNIT(p), rvalue);
+        if (!k)
+                return log_oom();
+
+        if (!path_is_absolute(k)) {
+                log_error("[%s:%u] Path is not absolute, ignoring: %s", filename, line, k);
+                free(k);
                 return 0;
         }
 
                 return 0;
         }
 
-        if (!(s = new0(PathSpec, 1)))
-                return -ENOMEM;
-
-        if (!(s->path = strdup(rvalue))) {
-                free(s);
-                return -ENOMEM;
+        s = new0(PathSpec, 1);
+        if (!s) {
+                free(k);
+                return log_oom();
         }
 
         }
 
-        path_kill_slashes(s->path);
-
+        s->path = path_kill_slashes(k);
         s->type = b;
         s->inotify_fd = -1;
 
         s->type = b;
         s->inotify_fd = -1;