}
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 */
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;
}
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",