chiark / gitweb /
parse-util: similar to safe_atou16_full() add safe_atou_full()
authorLennart Poettering <lennart@poettering.net>
Wed, 21 Mar 2018 21:31:40 +0000 (22:31 +0100)
committerSven Eden <yamakuzure@gmx.net>
Fri, 24 Aug 2018 14:47:08 +0000 (16:47 +0200)
What's good for uint16_t is also good for unsigned.

This is preparation for: #8140

src/basic/parse-util.c
src/basic/parse-util.h

index 37eb614792b5116eed3b588534e52a318b318acf..911447941fa1bd35bf0edcd4c84bc43087134b62 100644 (file)
@@ -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)
index 13b928c84e6f428f81e2766a1dbf22ccc0f7f1c3..954f00c4c585c0018bca946e24b91c88aec70b38 100644 (file)
@@ -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);