From: Lennart Poettering Date: Thu, 17 Jun 2010 20:50:35 +0000 (+0200) Subject: util: implement parse_pid() function X-Git-Tag: v1~178 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=3ba686c107b2b33e706f59432584875a4152d19a;ds=sidebyside util: implement parse_pid() function --- diff --git a/src/util.c b/src/util.c index ed0991a68..8f70c0f28 100644 --- a/src/util.c +++ b/src/util.c @@ -241,6 +241,29 @@ int parse_boolean(const char *v) { return -EINVAL; } +int parse_pid(const char *s, pid_t* ret_pid) { + unsigned long ul; + pid_t pid; + int r; + + assert(s); + assert(ret_pid); + + if ((r = safe_atolu(s, &ul)) < 0) + return r; + + pid = (pid_t) ul; + + if ((unsigned long) pid != ul) + return -ERANGE; + + if (pid <= 0) + return -ERANGE; + + *ret_pid = pid; + return 0; +} + int safe_atou(const char *s, unsigned *ret_u) { char *x = NULL; unsigned long l; diff --git a/src/util.h b/src/util.h index 1e5ee28eb..1ca8f90cf 100644 --- a/src/util.h +++ b/src/util.h @@ -108,6 +108,7 @@ void close_many(const int fds[], unsigned n_fd); int parse_boolean(const char *v); int parse_usec(const char *t, usec_t *usec); +int parse_pid(const char *s, pid_t* ret_pid); int safe_atou(const char *s, unsigned *ret_u); int safe_atoi(const char *s, int *ret_i);