diff options
-rw-r--r-- | src/util.c | 23 | ||||
-rw-r--r-- | src/util.h | 1 |
2 files changed, 24 insertions, 0 deletions
diff --git a/src/util.c b/src/util.c index ed0991a68b..8f70c0f28a 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 1e5ee28eba..1ca8f90cf1 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); |