From 93e4c84bb3d6169a02a5ddd1cd0690ad64d20cd8 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 19 Sep 2012 20:09:27 +0200 Subject: [PATCH] path: support specifier resolvin in .path units --- src/core/load-fragment.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c index 0d5d84142..93f051af4 100644 --- a/src/core/load-fragment.c +++ b/src/core/load-fragment.c @@ -186,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); @@ -1193,32 +1193,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; -- 2.30.2