From 696fd1ef4f2f8574e349332a16987c6772641edd Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 30 Apr 2015 12:33:54 +0200 Subject: core: simplify %r and %R logic a bit Do not calculate the cgroup path manually, just use normal unit fields and calls for that. --- src/core/unit-printf.c | 39 ++++++++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/src/core/unit-printf.c b/src/core/unit-printf.c index bb4aa2121..5513fe7d9 100644 --- a/src/core/unit-printf.c +++ b/src/core/unit-printf.c @@ -128,26 +128,35 @@ static int specifier_cgroup(char specifier, void *data, void *userdata, char **r static int specifier_cgroup_root(char specifier, void *data, void *userdata, char **ret) { Unit *u = userdata; - const char *slice; char *n; - int r; assert(u); - slice = unit_slice_name(u); - if (specifier == 'R' || !slice) - n = strdup(u->manager->cgroup_root); - else { - _cleanup_free_ char *p = NULL; + n = strdup(u->manager->cgroup_root); + if (!n) + return -ENOMEM; - r = cg_slice_to_path(slice, &p); - if (r < 0) - return r; + *ret = n; + return 0; +} - n = strjoin(u->manager->cgroup_root, "/", p, NULL); - if (!n) - return -ENOMEM; - } +static int specifier_cgroup_slice(char specifier, void *data, void *userdata, char **ret) { + Unit *u = userdata; + char *n; + + assert(u); + + if (UNIT_ISSET(u->slice)) { + Unit *slice; + + slice = UNIT_DEREF(u->slice); + + if (slice->cgroup_path) + n = strdup(slice->cgroup_path); + else + n = unit_default_cgroup_path(slice); + } else + n = strdup(u->manager->cgroup_root); *ret = n; return 0; @@ -392,7 +401,7 @@ int unit_full_printf(Unit *u, const char *format, char **ret) { { 'f', specifier_filename, NULL }, { 'c', specifier_cgroup, NULL }, - { 'r', specifier_cgroup_root, NULL }, + { 'r', specifier_cgroup_slice, NULL }, { 'R', specifier_cgroup_root, NULL }, { 't', specifier_runtime, NULL }, { 'U', specifier_user_name, NULL }, -- cgit v1.2.3