X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Funit.c;h=f786359fac3eb1e182a4fb44d5a9a99f5156db04;hb=f057408c9c3b54b6eeb96cd9f0a1333f30610614;hp=66372f2a92a8e4b98f5302aa1ec5bb2a6f371882;hpb=3b6fdb5b5afebc49a7e987e3e3bf7aa2615d1671;p=elogind.git diff --git a/src/unit.c b/src/unit.c index 66372f2a9..f786359fa 100644 --- a/src/unit.c +++ b/src/unit.c @@ -1511,12 +1511,9 @@ char *unit_dbus_path(Unit *u) { if (!(e = bus_path_escape(u->meta.id))) return NULL; - if (asprintf(&p, "/org/freedesktop/systemd1/unit/%s", e) < 0) { - free(e); - return NULL; - } - + p = strappend("/org/freedesktop/systemd1/unit/", e); free(e); + return p; } @@ -1526,8 +1523,13 @@ int unit_add_cgroup(Unit *u, CGroupBonding *b) { assert(u); assert(b); + assert(b->path); + if (!b->controller) + if (!(b->controller = strdup(SYSTEMD_CGROUP_CONTROLLER))) + return -ENOMEM; + /* Ensure this hasn't been added yet */ assert(!b->unit); @@ -1566,7 +1568,6 @@ static char *default_cgroup_path(Unit *u) { } int unit_add_cgroup_from_text(Unit *u, const char *name) { - size_t n; char *controller = NULL, *path = NULL; CGroupBonding *b = NULL; int r; @@ -1574,38 +1575,20 @@ int unit_add_cgroup_from_text(Unit *u, const char *name) { assert(u); assert(name); - /* Detect controller name */ - n = strcspn(name, ":"); - - if (name[n] == 0 || - (name[n] == ':' && name[n+1] == 0)) { - - /* Only controller name, no path? */ - - if (!(path = default_cgroup_path(u))) - return -ENOMEM; - - } else { - const char *p; - - /* Controller name, and path. */ - p = name+n+1; + if ((r = cg_split_spec(name, &controller, &path)) < 0) + return r; - if (!path_is_absolute(p)) - return -EINVAL; + if (!path) + path = default_cgroup_path(u); - if (!(path = strdup(p))) - return -ENOMEM; - } - - if (n > 0) - controller = strndup(name, n); - else + if (!controller) controller = strdup(SYSTEMD_CGROUP_CONTROLLER); - if (!controller) { - r = -ENOMEM; - goto fail; + if (!path || !controller) { + free(path); + free(controller); + + return -ENOMEM; } if (cgroup_bonding_find_list(u->meta.cgroup_bondings, controller)) { @@ -1650,9 +1633,6 @@ int unit_add_default_cgroup(Unit *u) { if (!(b = new0(CGroupBonding, 1))) return -ENOMEM; - if (!(b->controller = strdup(SYSTEMD_CGROUP_CONTROLLER))) - goto fail; - if (!(b->path = default_cgroup_path(u))) goto fail;