From: Lennart Poettering Date: Thu, 30 Apr 2015 10:33:54 +0000 (+0200) Subject: core: simplify %r and %R logic a bit X-Git-Tag: v220~223 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=696fd1ef4f2f8574e349332a16987c6772641edd;p=thirdparty%2Fsystemd.git core: simplify %r and %R logic a bit Do not calculate the cgroup path manually, just use normal unit fields and calls for that. --- diff --git a/src/core/unit-printf.c b/src/core/unit-printf.c index bb4aa2121da..5513fe7d9cc 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 },