From: Christian Brauner Date: Wed, 18 Oct 2017 17:53:17 +0000 (+0200) Subject: utils: add lxc_safe_long_long() X-Git-Tag: lxc-3.0.0.beta1~210^2~7 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b037bc675b33363ace7a244ae6e698d0638d2256;p=thirdparty%2Flxc.git utils: add lxc_safe_long_long() Signed-off-by: Christian Brauner --- diff --git a/src/lxc/utils.c b/src/lxc/utils.c index 95aad8b09..f76a8a8a0 100644 --- a/src/lxc/utils.c +++ b/src/lxc/utils.c @@ -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) { diff --git a/src/lxc/utils.h b/src/lxc/utils.h index 8d32e4aaa..1449f4df4 100644 --- a/src/lxc/utils.h +++ b/src/lxc/utils.h @@ -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. */