]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
utils: add lxc_safe_uint()
authorChristian Brauner <christian.brauner@canonical.com>
Tue, 6 Sep 2016 15:32:47 +0000 (17:32 +0200)
committerChristian Brauner <christian.brauner@canonical.com>
Tue, 22 Nov 2016 02:40:59 +0000 (03:40 +0100)
This function safely parses an unsigned integer. On success it returns 0 and
stores the unsigned integer in @converted. On error it returns a negative
errno.

Signed-off-by: Christian Brauner <christian.brauner@canonical.com>
src/lxc/utils.c
src/lxc/utils.h

index 9198340f69675a7597d9984d4515d2817f8e1ee6..9bf31570d8c9d06168b539944a79926ba4b01293 100644 (file)
@@ -1988,3 +1988,23 @@ int lxc_preserve_ns(const int pid, const char *ns)
 
        return open(path, O_RDONLY | O_CLOEXEC);
 }
+
+int lxc_safe_uint(const char *numstr, unsigned int *converted)
+{
+       char *err = NULL;
+       unsigned long int uli;
+
+       errno = 0;
+       uli = strtoul(numstr, &err, 0);
+       if (errno > 0)
+               return -errno;
+
+       if (!err || err == numstr || *err != '\0')
+               return -EINVAL;
+
+       if (uli > UINT_MAX)
+               return -ERANGE;
+
+       *converted = (unsigned)uli;
+       return 0;
+}
index 9b92daf3d27ecc32e130588e37353124a372a25f..0706125e1b8c29dcc69dd1491e29091ce80c8a01 100644 (file)
@@ -316,4 +316,8 @@ int lxc_preserve_ns(const int pid, const char *ns);
 
 /* Check whether a signal is blocked by a process. */
 bool task_blocking_signal(pid_t pid, int signal);
+
+/* Helper functions to parse numbers. */
+int lxc_safe_uint(const char *numstr, unsigned int *converted);
+
 #endif /* __LXC_UTILS_H */