mirror of
https://github.com/systemd/systemd.git
synced 2024-11-01 00:51:24 +03:00
core: simplify %r and %R logic a bit
Do not calculate the cgroup path manually, just use normal unit fields and calls for that.
This commit is contained in:
parent
c96cc5822c
commit
696fd1ef4f
@ -128,26 +128,35 @@ static int specifier_cgroup(char specifier, void *data, void *userdata, char **r
|
||||
|
||||
static int specifier_cgroup_root(char specifier, void *data, void *userdata, char **ret) {
|
||||
Unit *u = userdata;
|
||||
const char *slice;
|
||||
char *n;
|
||||
int r;
|
||||
|
||||
assert(u);
|
||||
|
||||
slice = unit_slice_name(u);
|
||||
if (specifier == 'R' || !slice)
|
||||
n = strdup(u->manager->cgroup_root);
|
||||
else {
|
||||
_cleanup_free_ char *p = NULL;
|
||||
|
||||
r = cg_slice_to_path(slice, &p);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
n = strjoin(u->manager->cgroup_root, "/", p, NULL);
|
||||
if (!n)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
*ret = n;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int specifier_cgroup_slice(char specifier, void *data, void *userdata, char **ret) {
|
||||
Unit *u = userdata;
|
||||
char *n;
|
||||
|
||||
assert(u);
|
||||
|
||||
if (UNIT_ISSET(u->slice)) {
|
||||
Unit *slice;
|
||||
|
||||
slice = UNIT_DEREF(u->slice);
|
||||
|
||||
if (slice->cgroup_path)
|
||||
n = strdup(slice->cgroup_path);
|
||||
else
|
||||
n = unit_default_cgroup_path(slice);
|
||||
} else
|
||||
n = strdup(u->manager->cgroup_root);
|
||||
|
||||
*ret = n;
|
||||
return 0;
|
||||
@ -392,7 +401,7 @@ int unit_full_printf(Unit *u, const char *format, char **ret) {
|
||||
|
||||
{ 'f', specifier_filename, NULL },
|
||||
{ 'c', specifier_cgroup, NULL },
|
||||
{ 'r', specifier_cgroup_root, NULL },
|
||||
{ 'r', specifier_cgroup_slice, NULL },
|
||||
{ 'R', specifier_cgroup_root, NULL },
|
||||
{ 't', specifier_runtime, NULL },
|
||||
{ 'U', specifier_user_name, NULL },
|
||||
|
Loading…
Reference in New Issue
Block a user