mirror of
https://github.com/systemd/systemd.git
synced 2024-11-08 11:27:32 +03:00
commit
39109ec08d
@ -786,7 +786,7 @@ int executable_is_script(const char *path, char **interpreter) {
|
||||
*/
|
||||
int get_status_field(const char *filename, const char *pattern, char **field) {
|
||||
_cleanup_free_ char *status = NULL;
|
||||
char *t;
|
||||
char *t, *f;
|
||||
size_t len;
|
||||
int r;
|
||||
|
||||
@ -820,9 +820,10 @@ int get_status_field(const char *filename, const char *pattern, char **field) {
|
||||
|
||||
len = strcspn(t, WHITESPACE);
|
||||
|
||||
*field = strndup(t, len);
|
||||
if (!*field)
|
||||
f = strndup(t, len);
|
||||
if (!f)
|
||||
return -ENOMEM;
|
||||
|
||||
*field = f;
|
||||
return 0;
|
||||
}
|
||||
|
@ -43,7 +43,10 @@ int get_process_state(pid_t pid) {
|
||||
assert(pid >= 0);
|
||||
|
||||
p = procfs_file_alloca(pid, "stat");
|
||||
|
||||
r = read_one_line_file(p, &line);
|
||||
if (r == -ENOENT)
|
||||
return -ESRCH;
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
@ -87,8 +90,11 @@ int get_process_cmdline(pid_t pid, size_t max_length, bool comm_fallback, char *
|
||||
p = procfs_file_alloca(pid, "cmdline");
|
||||
|
||||
f = fopen(p, "re");
|
||||
if (!f)
|
||||
if (!f) {
|
||||
if (errno == ENOENT)
|
||||
return -ESRCH;
|
||||
return -errno;
|
||||
}
|
||||
|
||||
if (max_length == 0) {
|
||||
size_t len = 0, allocated = 0;
|
||||
@ -182,8 +188,11 @@ int is_kernel_thread(pid_t pid) {
|
||||
|
||||
p = procfs_file_alloca(pid, "cmdline");
|
||||
f = fopen(p, "re");
|
||||
if (!f)
|
||||
if (!f) {
|
||||
if (errno == ENOENT)
|
||||
return -ESRCH;
|
||||
return -errno;
|
||||
}
|
||||
|
||||
count = fread(&c, 1, 1, f);
|
||||
eof = feof(f);
|
||||
@ -199,13 +208,18 @@ int is_kernel_thread(pid_t pid) {
|
||||
|
||||
int get_process_capeff(pid_t pid, char **capeff) {
|
||||
const char *p;
|
||||
int r;
|
||||
|
||||
assert(capeff);
|
||||
assert(pid >= 0);
|
||||
|
||||
p = procfs_file_alloca(pid, "status");
|
||||
|
||||
return get_status_field(p, "\nCapEff:", capeff);
|
||||
r = get_status_field(p, "\nCapEff:", capeff);
|
||||
if (r == -ENOENT)
|
||||
return -ESRCH;
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
static int get_process_link_contents(const char *proc_file, char **name) {
|
||||
@ -215,8 +229,10 @@ static int get_process_link_contents(const char *proc_file, char **name) {
|
||||
assert(name);
|
||||
|
||||
r = readlink_malloc(proc_file, name);
|
||||
if (r == -ENOENT)
|
||||
return -ESRCH;
|
||||
if (r < 0)
|
||||
return r == -ENOENT ? -ESRCH : r;
|
||||
return r;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -253,8 +269,11 @@ static int get_process_id(pid_t pid, const char *field, uid_t *uid) {
|
||||
|
||||
p = procfs_file_alloca(pid, "status");
|
||||
f = fopen(p, "re");
|
||||
if (!f)
|
||||
if (!f) {
|
||||
if (errno == ENOENT)
|
||||
return -ESRCH;
|
||||
return -errno;
|
||||
}
|
||||
|
||||
FOREACH_LINE(line, f, return -errno) {
|
||||
char *l;
|
||||
@ -316,8 +335,11 @@ int get_process_environ(pid_t pid, char **env) {
|
||||
p = procfs_file_alloca(pid, "environ");
|
||||
|
||||
f = fopen(p, "re");
|
||||
if (!f)
|
||||
if (!f) {
|
||||
if (errno == ENOENT)
|
||||
return -ESRCH;
|
||||
return -errno;
|
||||
}
|
||||
|
||||
while ((c = fgetc(f)) != EOF) {
|
||||
if (!GREEDY_REALLOC(outcome, allocated, sz + 5))
|
||||
@ -329,10 +351,13 @@ int get_process_environ(pid_t pid, char **env) {
|
||||
sz += cescape_char(c, outcome + sz);
|
||||
}
|
||||
|
||||
if (sz == 0)
|
||||
return -ENOENT;
|
||||
if (!outcome) {
|
||||
outcome = strdup("");
|
||||
if (!outcome)
|
||||
return -ENOMEM;
|
||||
} else
|
||||
outcome[sz] = '\0';
|
||||
|
||||
outcome[sz] = '\0';
|
||||
*env = outcome;
|
||||
outcome = NULL;
|
||||
|
||||
@ -355,6 +380,8 @@ int get_parent_of_pid(pid_t pid, pid_t *_ppid) {
|
||||
|
||||
p = procfs_file_alloca(pid, "stat");
|
||||
r = read_one_line_file(p, &line);
|
||||
if (r == -ENOENT)
|
||||
return -ESRCH;
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
@ -475,8 +502,11 @@ int getenv_for_pid(pid_t pid, const char *field, char **_value) {
|
||||
path = procfs_file_alloca(pid, "environ");
|
||||
|
||||
f = fopen(path, "re");
|
||||
if (!f)
|
||||
if (!f) {
|
||||
if (errno == ENOENT)
|
||||
return -ESRCH;
|
||||
return -errno;
|
||||
}
|
||||
|
||||
l = strlen(field);
|
||||
r = 0;
|
||||
@ -535,7 +565,7 @@ bool pid_is_alive(pid_t pid) {
|
||||
return false;
|
||||
|
||||
r = get_process_state(pid);
|
||||
if (r == -ENOENT || r == 'Z')
|
||||
if (r == -ESRCH || r == 'Z')
|
||||
return false;
|
||||
|
||||
return true;
|
||||
|
Loading…
Reference in New Issue
Block a user