1
0
mirror of https://github.com/systemd/systemd.git synced 2025-02-09 13:57:42 +03:00

basic/cgroup-util: use strdup_to() and strdup_to_full() as appropriate

This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2024-03-15 13:39:50 +01:00
parent d3a3d2d328
commit 8922a728f7

View File

@ -135,7 +135,7 @@ int cg_read_event(
return r;
for (const char *p = content;;) {
_cleanup_free_ char *line = NULL, *key = NULL, *val = NULL;
_cleanup_free_ char *line = NULL, *key = NULL;
const char *q;
r = extract_first_word(&p, &line, "\n", 0);
@ -154,12 +154,7 @@ int cg_read_event(
if (!streq(key, event))
continue;
val = strdup(q);
if (!val)
return -ENOMEM;
*ret = TAKE_PTR(val);
return 0;
return strdup_to(ret, q);
}
}
@ -234,20 +229,13 @@ int cg_read_subgroup(DIR *d, char **ret) {
assert(ret);
FOREACH_DIRENT_ALL(de, d, return -errno) {
char *b;
if (de->d_type != DT_DIR)
continue;
if (dot_or_dot_dot(de->d_name))
continue;
b = strdup(de->d_name);
if (!b)
return -ENOMEM;
*ret = b;
return 1;
return strdup_to_full(ret, de->d_name);
}
*ret = NULL;
@ -1125,44 +1113,29 @@ int cg_pid_get_path_shifted(pid_t pid, const char *root, char **ret_cgroup) {
if (r < 0)
return r;
if (c == raw)
if (c == raw) {
*ret_cgroup = TAKE_PTR(raw);
else {
char *n;
n = strdup(c);
if (!n)
return -ENOMEM;
*ret_cgroup = n;
return 0;
}
return 0;
return strdup_to(ret_cgroup, c);
}
int cg_path_decode_unit(const char *cgroup, char **ret_unit) {
char *c, *s;
size_t n;
assert(cgroup);
assert(ret_unit);
n = strcspn(cgroup, "/");
size_t n = strcspn(cgroup, "/");
if (n < 3)
return -ENXIO;
c = strndupa_safe(cgroup, n);
char *c = strndupa_safe(cgroup, n);
c = cg_unescape(c);
if (!unit_name_is_valid(c, UNIT_NAME_PLAIN|UNIT_NAME_INSTANCE))
return -ENXIO;
s = strdup(c);
if (!s)
return -ENOMEM;
*ret_unit = s;
return 0;
return strdup_to(ret_unit, c);
}
static bool valid_slice_name(const char *p, size_t n) {
@ -1467,17 +1440,10 @@ int cg_path_get_session(const char *path, char **ret_session) {
if (!session_id_valid(start))
return -ENXIO;
if (ret_session) {
char *rr;
if (!ret_session)
return 0;
rr = strdup(start);
if (!rr)
return -ENOMEM;
*ret_session = rr;
}
return 0;
return strdup_to(ret_session, start);
}
int cg_pid_get_session(pid_t pid, char **ret_session) {
@ -1538,30 +1504,19 @@ int cg_path_get_slice(const char *p, char **ret_slice) {
* stops before we come to the first non-slice unit. */
for (;;) {
size_t n;
p += strspn(p, "/");
n = strcspn(p, "/");
if (!valid_slice_name(p, n)) {
if (!e) {
char *s;
s = strdup(SPECIAL_ROOT_SLICE);
if (!s)
return -ENOMEM;
*ret_slice = s;
return 0;
}
return cg_path_decode_unit(e, ret_slice);
}
size_t n = strcspn(p, "/");
if (!valid_slice_name(p, n))
break;
e = p;
p += n;
}
if (e)
return cg_path_decode_unit(e, ret_slice);
return strdup_to(ret_slice, SPECIAL_ROOT_SLICE);
}
int cg_pid_get_slice(pid_t pid, char **ret_slice) {
@ -1714,15 +1669,8 @@ int cg_slice_to_path(const char *unit, char **ret) {
assert(unit);
assert(ret);
if (streq(unit, SPECIAL_ROOT_SLICE)) {
char *x;
x = strdup("");
if (!x)
return -ENOMEM;
*ret = x;
return 0;
}
if (streq(unit, SPECIAL_ROOT_SLICE))
return strdup_to(ret, "");
if (!unit_name_is_valid(unit, UNIT_NAME_PLAIN))
return -EINVAL;