]> git.proxmox.com Git - mirror_lxcfs.git/commitdiff
utils: add safe_uint32() helper
authorAlexander Mikhalitsyn <aleksandr.mikhalitsyn@canonical.com>
Wed, 30 Nov 2022 16:25:24 +0000 (17:25 +0100)
committerAlexander Mikhalitsyn <aleksandr.mikhalitsyn@canonical.com>
Wed, 30 Nov 2022 22:50:53 +0000 (23:50 +0100)
Signed-off-by: Alexander Mikhalitsyn <aleksandr.mikhalitsyn@canonical.com>
src/utils.c
src/utils.h

index 926760df5a3bf9e10e291a4010d0fddba9cac816..6bfedeba725a88f038cba6f8d4af0394b8967311 100644 (file)
@@ -529,6 +529,29 @@ int safe_uint64(const char *numstr, uint64_t *converted, int base)
        return 0;
 }
 
+int safe_uint32(const char *numstr, uint32_t *converted, int base)
+{
+       char *err = NULL;
+       unsigned long uli;
+
+       while (isspace(*numstr))
+               numstr++;
+
+       if (*numstr == '-')
+               return -EINVAL;
+
+       errno = 0;
+       uli = strtoul(numstr, &err, base);
+       if (errno == ERANGE && uli == UINT32_MAX)
+               return -ERANGE;
+
+       if (err == numstr || *err != '\0')
+               return -EINVAL;
+
+       *converted = (uint32_t)uli;
+       return 0;
+}
+
 static int char_left_gc(const char *buffer, size_t len)
 {
        size_t i;
index eb01aca2f780db335634958a3e97e13c6478d9e5..dc0ec3a03a2c3fdb6226994d93b6d1c1e0e7657a 100644 (file)
@@ -62,6 +62,7 @@ extern FILE *fdopen_cached(int fd, const char *mode, void **caller_freed_buffer)
 extern DIR *opendir_flags(const char *path, int oflags);
 extern ssize_t write_nointr(int fd, const void *buf, size_t count);
 extern int safe_uint64(const char *numstr, uint64_t *converted, int base);
+extern int safe_uint32(const char *numstr, uint32_t *converted, int base);
 extern char *trim_whitespace_in_place(char *buffer);
 
 static inline bool file_exists(const char *f)