chiark / gitweb /
logind: support for hybrid sleep (i.e. suspend+hibernate at the same time)
[elogind.git] / src / core / load-fragment.c
index 482d28b79587221dc2523532663350100f0b75be..2504d730dc43694aafa415abe78e8d614e33e100 100644 (file)
@@ -42,6 +42,7 @@
 #include "securebits.h"
 #include "missing.h"
 #include "unit-name.h"
+#include "unit-printf.h"
 #include "bus-errors.h"
 #include "utf8.h"
 #include "path-util.h"
@@ -185,7 +186,7 @@ int config_parse_unit_path_printf(
 
         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);
@@ -325,10 +326,12 @@ int config_parse_socket_bind(
 
         s = SOCKET(data);
 
-        if ((b = socket_address_bind_ipv6_only_from_string(rvalue)) < 0) {
+        b = socket_address_bind_ipv6_only_from_string(rvalue);
+        if (b < 0) {
                 int r;
 
-                if ((r = parse_boolean(rvalue)) < 0) {
+                r = parse_boolean(rvalue);
+                if (r < 0) {
                         log_error("[%s:%u] Failed to parse bind IPv6 only value, ignoring: %s", filename, line, rvalue);
                         return 0;
                 }
@@ -1192,32 +1195,36 @@ int config_parse_path_spec(
         Path *p = data;
         PathSpec *s;
         PathType b;
+        char *k;
 
         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;
         }
 
-        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;
         }
 
-        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;
 
@@ -1469,7 +1476,7 @@ int config_parse_unit_condition_path(
         Unit *u = data;
         bool trigger, negate;
         Condition *c;
-        char *p;
+        _cleanup_free_ char *p = NULL;
 
         assert(filename);
         assert(lvalue);
@@ -1496,7 +1503,6 @@ int config_parse_unit_condition_path(
         c = condition_new(cond, p, trigger, negate);
         if (!c)
                 return -ENOMEM;
-        free(p);
 
         LIST_PREPEND(Condition, conditions, u->conditions, c);
         return 0;
@@ -1516,7 +1522,7 @@ int config_parse_unit_condition_string(
         Unit *u = data;
         bool trigger, negate;
         Condition *c;
-        char *s;
+        _cleanup_free_ char *s = NULL;
 
         assert(filename);
         assert(lvalue);
@@ -1538,7 +1544,6 @@ int config_parse_unit_condition_string(
         c = condition_new(cond, s, trigger, negate);
         if (!c)
                 return log_oom();
-        free(s);
 
         LIST_PREPEND(Condition, conditions, u->conditions, c);
         return 0;