]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
utils: add lxc_safe_ulong()
authorChristian Brauner <christian.brauner@ubuntu.com>
Tue, 30 May 2017 11:29:46 +0000 (13:29 +0200)
committerChristian Brauner <christian.brauner@ubuntu.com>
Tue, 30 May 2017 16:43:07 +0000 (18:43 +0200)
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
src/lxc/utils.c
src/lxc/utils.h

index cc7e800201854cb074b2a99d6aa993598df1d158..02a58c2f1919fa2c38c7867b5a218d331343a96f 100644 (file)
@@ -2021,6 +2021,29 @@ int lxc_safe_uint(const char *numstr, unsigned int *converted)
        return 0;
 }
 
+int lxc_safe_ulong(const char *numstr, unsigned long *converted)
+{
+       char *err = NULL;
+       unsigned long int uli;
+
+       while (isspace(*numstr))
+               numstr++;
+
+       if (*numstr == '-')
+               return -EINVAL;
+
+       errno = 0;
+       uli = strtoul(numstr, &err, 0);
+       if (errno == ERANGE && uli == ULONG_MAX)
+               return -ERANGE;
+
+       if (err == numstr || *err != '\0')
+               return -EINVAL;
+
+       *converted = uli;
+       return 0;
+}
+
 int lxc_safe_int(const char *numstr, int *converted)
 {
        char *err = NULL;
index 320aa6bf7e9e459dc34519919e478008f836fcea..ea923b0dd3015a44a5f3159941e4834234bf22d1 100644 (file)
@@ -340,6 +340,7 @@ bool task_blocking_signal(pid_t pid, int signal);
 int lxc_safe_uint(const char *numstr, unsigned int *converted);
 int lxc_safe_int(const char *numstr, int *converted);
 int lxc_safe_long(const char *numstr, long int *converted);
+int lxc_safe_ulong(const char *numstr, unsigned long *converted);
 
 /* Switch to a new uid and gid. */
 int lxc_switch_uid_gid(uid_t uid, gid_t gid);