X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Futil.c;h=b1a9db1d4660681535439efeffea5716c5255e54;hb=e10c9985bbc3cf79f12f9ec7317adfe697fa8214;hp=9be11f5605c829fa7016bffd07fe36e88ac1e6dc;hpb=2d2ebd6b8f0775b93480bf05464865a0c78a9390;p=elogind.git diff --git a/src/shared/util.c b/src/shared/util.c index 9be11f560..b1a9db1d4 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -513,6 +513,31 @@ char *truncate_nl(char *s) { return s; } +int get_process_state(pid_t pid) { + const char *p; + char state; + int r; + _cleanup_free_ char *line = NULL; + + assert(pid >= 0); + + p = procfs_file_alloca(pid, "stat"); + r = read_one_line_file(p, &line); + if (r < 0) + return r; + + p = strrchr(line, ')'); + if (!p) + return -EIO; + + p++; + + if (sscanf(p, " %c", &state) != 1) + return -EIO; + + return (unsigned char) state; +} + int get_process_comm(pid_t pid, char **name) { const char *p; int r; @@ -5613,7 +5638,7 @@ static int search_and_fopen_internal(const char *path, const char *mode, char ** assert(mode); assert(_f); - if (!path_strv_canonicalize_uniq(search)) + if (!path_strv_canonicalize_absolute_uniq(search, NULL)) return -ENOMEM; STRV_FOREACH(i, search) {