From 3ba686c107b2b33e706f59432584875a4152d19a Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 17 Jun 2010 22:50:35 +0200 Subject: [PATCH] util: implement parse_pid() function --- src/util.c | 23 +++++++++++++++++++++++ src/util.h | 1 + 2 files changed, 24 insertions(+) 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); -- 2.30.2