diff --git a/src/lxc/utils.c b/src/lxc/utils.c index e1191a3cf..200f5cdaf 100644 --- a/src/lxc/utils.c +++ b/src/lxc/utils.c @@ -2007,7 +2007,7 @@ int lxc_safe_uint(const char *numstr, unsigned int *converted) if (uli > UINT_MAX) return -ERANGE; - *converted = (unsigned)uli; + *converted = (unsigned int)uli; return 0; } @@ -2030,3 +2030,23 @@ int lxc_safe_int(const char *numstr, int *converted) *converted = (int)sli; return 0; } + +int lxc_safe_long(const char *numstr, long int *converted) +{ + char *err = NULL; + signed long int sli; + + errno = 0; + sli = strtol(numstr, &err, 0); + if (errno > 0) + return -errno; + + if (!err || err == numstr || *err != '\0') + return -EINVAL; + + if (sli > LONG_MAX) + return -ERANGE; + + *converted = sli; + return 0; +} diff --git a/src/lxc/utils.h b/src/lxc/utils.h index 8fba5152e..0d63bb699 100644 --- a/src/lxc/utils.h +++ b/src/lxc/utils.h @@ -320,5 +320,6 @@ bool task_blocking_signal(pid_t pid, int signal); /* Helper functions to parse numbers. */ 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); #endif /* __LXC_UTILS_H */