mirror of
https://github.com/systemd/systemd.git
synced 2025-01-27 18:04:05 +03:00
basic/cgroup-util: port over to string_contains_word()
This commit is contained in:
parent
46ed9f4ce1
commit
ae7ef63f21
@ -652,14 +652,13 @@ int cg_remove_xattr(const char *controller, const char *path, const char *name)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int cg_pid_get_path(const char *controller, pid_t pid, char **path) {
|
int cg_pid_get_path(const char *controller, pid_t pid, char **ret_path) {
|
||||||
_cleanup_fclose_ FILE *f = NULL;
|
_cleanup_fclose_ FILE *f = NULL;
|
||||||
const char *fs, *controller_str;
|
const char *fs, *controller_str;
|
||||||
int unified, r;
|
int unified, r;
|
||||||
size_t cs = 0;
|
|
||||||
|
|
||||||
assert(path);
|
|
||||||
assert(pid >= 0);
|
assert(pid >= 0);
|
||||||
|
assert(ret_path);
|
||||||
|
|
||||||
if (controller) {
|
if (controller) {
|
||||||
if (!cg_controller_is_valid(controller))
|
if (!cg_controller_is_valid(controller))
|
||||||
@ -675,8 +674,6 @@ int cg_pid_get_path(const char *controller, pid_t pid, char **path) {
|
|||||||
controller_str = SYSTEMD_CGROUP_CONTROLLER_LEGACY;
|
controller_str = SYSTEMD_CGROUP_CONTROLLER_LEGACY;
|
||||||
else
|
else
|
||||||
controller_str = controller;
|
controller_str = controller;
|
||||||
|
|
||||||
cs = strlen(controller_str);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fs = procfs_file_alloca(pid, "cgroup");
|
fs = procfs_file_alloca(pid, "cgroup");
|
||||||
@ -688,13 +685,13 @@ int cg_pid_get_path(const char *controller, pid_t pid, char **path) {
|
|||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
_cleanup_free_ char *line = NULL;
|
_cleanup_free_ char *line = NULL;
|
||||||
char *e, *p;
|
char *e;
|
||||||
|
|
||||||
r = read_line(f, LONG_LINE_MAX, &line);
|
r = read_line(f, LONG_LINE_MAX, &line);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
if (r == 0)
|
if (r == 0)
|
||||||
break;
|
return -ENODATA;
|
||||||
|
|
||||||
if (unified) {
|
if (unified) {
|
||||||
e = startswith(line, "0:");
|
e = startswith(line, "0:");
|
||||||
@ -706,9 +703,6 @@ int cg_pid_get_path(const char *controller, pid_t pid, char **path) {
|
|||||||
continue;
|
continue;
|
||||||
} else {
|
} else {
|
||||||
char *l;
|
char *l;
|
||||||
size_t k;
|
|
||||||
const char *word, *state;
|
|
||||||
bool found = false;
|
|
||||||
|
|
||||||
l = strchr(line, ':');
|
l = strchr(line, ':');
|
||||||
if (!l)
|
if (!l)
|
||||||
@ -718,31 +712,27 @@ int cg_pid_get_path(const char *controller, pid_t pid, char **path) {
|
|||||||
e = strchr(l, ':');
|
e = strchr(l, ':');
|
||||||
if (!e)
|
if (!e)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
*e = 0;
|
*e = 0;
|
||||||
FOREACH_WORD_SEPARATOR(word, k, l, ",", state)
|
|
||||||
if (k == cs && memcmp(word, controller_str, cs) == 0) {
|
r = string_contains_word(l, ",", controller_str);
|
||||||
found = true;
|
if (r < 0)
|
||||||
break;
|
return r;
|
||||||
}
|
if (r == 0)
|
||||||
if (!found)
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
p = strdup(e + 1);
|
char *path = strdup(e + 1);
|
||||||
if (!p)
|
if (!path)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
/* Truncate suffix indicating the process is a zombie */
|
/* Truncate suffix indicating the process is a zombie */
|
||||||
e = endswith(p, " (deleted)");
|
e = endswith(path, " (deleted)");
|
||||||
if (e)
|
if (e)
|
||||||
*e = 0;
|
*e = 0;
|
||||||
|
|
||||||
*path = p;
|
*ret_path = path;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return -ENODATA;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int cg_install_release_agent(const char *controller, const char *agent) {
|
int cg_install_release_agent(const char *controller, const char *agent) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user