X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Fcgroup-util.c;h=05c3125aec79ca0ba2fafb2c27eb94ec65ccc085;hb=92947a0878c5d129adb37ddbfdef35274ef5c6ae;hp=86729f14bf925be2dde0bf36205517e29f4ee148;hpb=b12afc8c5c5c3ee5720780df9a602288bbcc24ea;p=elogind.git diff --git a/src/shared/cgroup-util.c b/src/shared/cgroup-util.c index 86729f14b..05c3125ae 100644 --- a/src/shared/cgroup-util.c +++ b/src/shared/cgroup-util.c @@ -30,12 +30,10 @@ #include #include "cgroup-util.h" -#include "log.h" #include "set.h" #include "macro.h" #include "util.h" #include "path-util.h" -#include "strv.h" #include "unit-name.h" #include "fileio.h" #include "special.h" @@ -510,7 +508,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 +1249,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 +1588,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"