core: simplify %r and %R logic a bit
authorLennart Poettering <lennart@poettering.net>
Thu, 30 Apr 2015 10:33:54 +0000 (12:33 +0200)
committerLennart Poettering <lennart@poettering.net>
Thu, 30 Apr 2015 10:33:54 +0000 (12:33 +0200)
Do not calculate the cgroup path manually, just use normal unit fields
and calls for that.

src/core/unit-printf.c

index bb4aa21..5513fe7 100644 (file)
@@ -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 },