X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=util.c;h=3fe59c8ebba4b1a425bb0e4ee6bd2860d2715f9b;hb=e05797fba258d7a58987cc8870fae6e34b94fe46;hp=a0f26762dc39b87b3f6cb3c24acb50db14849512;hpb=db12775d59ab709f8afc361eaa30c9d54a0a8d7c;p=elogind.git diff --git a/util.c b/util.c index a0f26762d..3fe59c8eb 100644 --- a/util.c +++ b/util.c @@ -42,6 +42,19 @@ #include "log.h" #include "strv.h" +bool streq_ptr(const char *a, const char *b) { + + /* Like streq(), but tries to make sense of NULL pointers */ + + if (a && b) + return streq(a, b); + + if (!a && !b) + return true; + + return false; +} + usec_t now(clockid_t clock_id) { struct timespec ts; @@ -412,7 +425,7 @@ finish: int read_one_line_file(const char *fn, char **line) { FILE *f; int r; - char t[64], *c; + char t[2048], *c; assert(fn); assert(line); @@ -438,6 +451,33 @@ finish: return r; } +char *truncate_nl(char *s) { + assert(s); + + s[strcspn(s, NEWLINE)] = 0; + return s; +} + +int get_process_name(pid_t pid, char **name) { + char *p; + int r; + + assert(pid >= 1); + assert(name); + + if (asprintf(&p, "/proc/%llu/comm", (unsigned long long) pid) < 0) + return -ENOMEM; + + r = read_one_line_file(p, name); + free(p); + + if (r < 0) + return r; + + truncate_nl(*name); + return 0; +} + char *strappend(const char *s, const char *suffix) { size_t a, b; char *r;