X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Fcgroup-label.c;h=5b5163c250e1b8e60fbba2e9c55715633577a2c7;hb=b32ff512191bf873266ee8067f6f6c8a30c96a5e;hp=06e3c1626063683f8f1570f18733e1a7ce40fbe3;hpb=3474ae3c7e1981301d0b35bc89d759ca13f06e8f;p=elogind.git diff --git a/src/shared/cgroup-label.c b/src/shared/cgroup-label.c index 06e3c1626..5b5163c25 100644 --- a/src/shared/cgroup-label.c +++ b/src/shared/cgroup-label.c @@ -36,47 +36,42 @@ #include "util.h" #include "mkdir.h" -int cg_create(const char *controller, const char *path) { - char *fs; +int cg_create(const char *controller, const char *path, const char *suffix) { + _cleanup_free_ char *fs = NULL; int r; - assert(controller); - assert(path); + r = cg_get_path_and_check(controller, path, suffix, &fs); + if (r < 0) + return r; - r = cg_get_path_and_check(controller, path, NULL, &fs); + r = mkdir_parents_label(fs, 0755); if (r < 0) return r; - r = mkdir_parents(fs, 0755); + if (mkdir(fs, 0755) < 0) { - if (r >= 0) { - if (mkdir(fs, 0755) >= 0) - r = 1; - else if (errno == EEXIST) - r = 0; - else - r = -errno; - } + if (errno == EEXIST) + return 0; - free(fs); + return -errno; + } - return r; + return 1; } int cg_create_and_attach(const char *controller, const char *path, pid_t pid) { int r, q; - assert(controller); - assert(path); assert(pid >= 0); - if ((r = cg_create(controller, path)) < 0) + r = cg_create(controller, path, NULL); + if (r < 0) return r; - if ((q = cg_attach(controller, path, pid)) < 0) + q = cg_attach(controller, path, pid); + if (q < 0) return q; /* This does not remove the cgroup on failure */ - return r; }