chiark / gitweb /
cg_path_get_user_unit(): Did not correctly parse user-unit templates.
[elogind.git] / src / shared / cgroup-util.c
index 86729f14bf925be2dde0bf36205517e29f4ee148..dfd8689b72a88a5e58ce6049d8c9ee09abd564d1 100644 (file)
@@ -510,7 +510,7 @@ static int check_hierarchy(const char *p) {
                 return 0;
 
         /* Check if this controller actually really exists */
-        cc = strappenda("/sys/fs/cgroup/", p);
+        cc = strjoina("/sys/fs/cgroup/", p);
         if (laccess(cc, F_OK) < 0)
                 return -errno;
 
@@ -1251,17 +1251,15 @@ int cg_path_get_user_unit(const char *path, char **unit) {
         /* Skip slices, if there are any */
         e = skip_slices(path);
 
-        /* Skip the session scope... */
+        /* Skip the session scope or user manager... */
         t = skip_session(e);
-        if (t)
-                /* ... and skip more slices if there's one */
-                e = skip_slices(t);
-        else {
-                /* ... or require a user manager unit to be there */
-                e = skip_user_manager(e);
-                if (!e)
-                        return -ENOENT;
-        }
+        if (!t)
+                t = skip_user_manager(e);
+        if (!t)
+                return -ENOENT;
+
+        /* ... and skip more slices if there are any */
+        e = skip_slices(t);
 
         return cg_path_decode_unit(e, unit);
 }
@@ -1592,6 +1590,17 @@ int cg_set_attribute(const char *controller, const char *path, const char *attri
         return write_string_file_no_create(p, value);
 }
 
+int cg_get_attribute(const char *controller, const char *path, const char *attribute, char **ret) {
+        _cleanup_free_ char *p = NULL;
+        int r;
+
+        r = cg_get_path(controller, path, attribute, &p);
+        if (r < 0)
+                return r;
+
+        return read_one_line_file(p, ret);
+}
+
 static const char mask_names[] =
         "cpu\0"
         "cpuacct\0"