From: Lennart Poettering Date: Wed, 21 Mar 2018 21:31:40 +0000 (+0100) Subject: parse-util: similar to safe_atou16_full() add safe_atou_full() X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=7cba4007b6b434d222b3f6aa8fe66f0a07db1d2e;p=elogind.git parse-util: similar to safe_atou16_full() add safe_atou_full() What's good for uint16_t is also good for unsigned. This is preparation for: #8140 --- diff --git a/src/basic/parse-util.c b/src/basic/parse-util.c index 37eb61479..911447941 100644 --- a/src/basic/parse-util.c +++ b/src/basic/parse-util.c @@ -376,12 +376,13 @@ finish: } -int safe_atou(const char *s, unsigned *ret_u) { +int safe_atou_full(const char *s, unsigned base, unsigned *ret_u) { char *x = NULL; unsigned long l; assert(s); assert(ret_u); + assert(base <= 16); /* strtoul() is happy to parse negative values, and silently * converts them to unsigned values without generating an @@ -394,7 +395,7 @@ int safe_atou(const char *s, unsigned *ret_u) { s += strspn(s, WHITESPACE); errno = 0; - l = strtoul(s, &x, 0); + l = strtoul(s, &x, base); if (errno > 0) return -errno; if (!x || x == s || *x != 0) diff --git a/src/basic/parse-util.h b/src/basic/parse-util.h index 13b928c84..954f00c4c 100644 --- a/src/basic/parse-util.h +++ b/src/basic/parse-util.h @@ -46,7 +46,12 @@ int parse_syscall_and_errno(const char *in, char **name, int *error); #define FORMAT_BYTES_MAX 8 char *format_bytes(char *buf, size_t l, uint64_t t); -int safe_atou(const char *s, unsigned *ret_u); +int safe_atou_full(const char *s, unsigned base, unsigned *ret_u); + +static inline int safe_atou(const char *s, unsigned *ret_u) { + return safe_atou_full(s, 0, ret_u); +} + int safe_atoi(const char *s, int *ret_i); int safe_atollu(const char *s, unsigned long long *ret_u); int safe_atolli(const char *s, long long int *ret_i);