]> git.proxmox.com Git - mirror_lxc.git/commitdiff
utils: add lxc_safe_long_long()
authorChristian Brauner <christian.brauner@ubuntu.com>
Wed, 18 Oct 2017 17:53:17 +0000 (19:53 +0200)
committerChristian Brauner <christian.brauner@ubuntu.com>
Sat, 21 Oct 2017 16:38:13 +0000 (18:38 +0200)
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
src/lxc/utils.c
src/lxc/utils.h

index 95aad8b09ed2fdeb317f55cdfe81d8e1dfa7620c..f76a8a8a0f15f2a710b557fa2e8647546209beb0 100644 (file)
@@ -2003,6 +2003,26 @@ int lxc_safe_long(const char *numstr, long int *converted)
        return 0;
 }
 
+int lxc_safe_long_long(const char *numstr, long long int *converted)
+{
+       char *err = NULL;
+       signed long long int sli;
+
+       errno = 0;
+       sli = strtoll(numstr, &err, 0);
+       if (errno == ERANGE && (sli == LLONG_MAX || sli == LLONG_MIN))
+               return -ERANGE;
+
+       if (errno != 0 && sli == 0)
+               return -EINVAL;
+
+       if (err == numstr || *err != '\0')
+               return -EINVAL;
+
+       *converted = sli;
+       return 0;
+}
+
 int lxc_switch_uid_gid(uid_t uid, gid_t gid)
 {
        if (setgid(gid) < 0) {
index 8d32e4aaa2f834b27034540bb68f5926ef9180be..1449f4df40335debf705d5f877dee0be48c2e318 100644 (file)
@@ -419,6 +419,7 @@ extern bool task_blocking_signal(pid_t pid, int signal);
 extern int lxc_safe_uint(const char *numstr, unsigned int *converted);
 extern int lxc_safe_int(const char *numstr, int *converted);
 extern int lxc_safe_long(const char *numstr, long int *converted);
+extern int lxc_safe_long_long(const char *numstr, long long int *converted);
 extern int lxc_safe_ulong(const char *numstr, unsigned long *converted);
 
 /* Switch to a new uid and gid. */