diff --git a/src/basic/cgroup-util.c b/src/basic/cgroup-util.c index d8e94c3ed9..b68cab68a0 100644 --- a/src/basic/cgroup-util.c +++ b/src/basic/cgroup-util.c @@ -959,13 +959,12 @@ int cg_get_root_path(char **ret_path) { } int cg_shift_path(const char *cgroup, const char *root, const char **ret_shifted) { - _cleanup_free_ char *rt = NULL; - char *p; int r; assert(cgroup); assert(ret_shifted); + _cleanup_free_ char *rt = NULL; if (!root) { /* If the root was specified let's use that, otherwise * let's determine it from PID 1 */ @@ -977,12 +976,7 @@ int cg_shift_path(const char *cgroup, const char *root, const char **ret_shifted root = rt; } - p = path_startswith(cgroup, root); - if (p && p > cgroup) - *ret_shifted = p - 1; - else - *ret_shifted = cgroup; - + *ret_shifted = path_startswith_full(cgroup, root, PATH_STARTSWITH_RETURN_LEADING_SLASH) ?: cgroup; return 0; } diff --git a/src/core/cgroup.c b/src/core/cgroup.c index 61a034641b..e9dade8eb3 100644 --- a/src/core/cgroup.c +++ b/src/core/cgroup.c @@ -2808,19 +2808,13 @@ static int unit_prune_cgroup_via_bus(Unit *u) { return -EOWNERDEAD; /* Determine this unit's cgroup path relative to our cgroup root */ - const char *pp = path_startswith(crt->cgroup_path, u->manager->cgroup_root); + const char *pp = path_startswith_full( + crt->cgroup_path, + u->manager->cgroup_root, + PATH_STARTSWITH_RETURN_LEADING_SLASH); if (!pp) return -EINVAL; - _cleanup_free_ char *absolute = NULL; - if (!path_is_absolute(pp)) { /* RemoveSubgroupFromUnit() wants an absolute path */ - absolute = strjoin("/", pp); - if (!absolute) - return -ENOMEM; - - pp = absolute; - } - r = bus_call_method(u->manager->system_bus, bus_systemd_mgr, "RemoveSubgroupFromUnit",