]> git.ipfire.org Git - thirdparty/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>
Wed, 8 Nov 2017 23:34:32 +0000 (00:34 +0100)
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
src/lxc/utils.c
src/lxc/utils.h

index d3c8e3af834e5d082f1719d1318e5a47ef0b660d..bcff31a412349e924c82bf349aa0681b194398dc 100644 (file)
@@ -2064,6 +2064,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 6bbe5ef61f1877f3f269a0f267dc43d7747db67d..331c448aa43bb82ffc5f305dc9c3feef3e43e5f4 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. */