X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Fcgroup-label.c;h=5b5163c250e1b8e60fbba2e9c55715633577a2c7;hb=e4ee6e5cc3e8e23e1ecc0d9fa756d9cc2534d218;hp=f9a42c679eed35ccc3665ce581a363b1d94cd7e8;hpb=cc527a4734d636f1ab5a66576cb7e232af3cc261;p=elogind.git diff --git a/src/shared/cgroup-label.c b/src/shared/cgroup-label.c index f9a42c679..5b5163c25 100644 --- a/src/shared/cgroup-label.c +++ b/src/shared/cgroup-label.c @@ -6,16 +6,16 @@ Copyright 2010 Lennart Poettering systemd is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or + under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. systemd is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - General Public License for more details. + Lesser General Public License for more details. - You should have received a copy of the GNU General Public License + You should have received a copy of the GNU Lesser General Public License along with systemd; If not, see . ***/ @@ -36,46 +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; - if ((r = cg_get_path(controller, path, NULL, &fs)) < 0) + 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; }