From: Christian Brauner Date: Tue, 30 May 2017 11:29:46 +0000 (+0200) Subject: utils: add lxc_safe_ulong() X-Git-Tag: lxc-2.1.0~110^2~110 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=681188c14e91e7a6dc5177d63955dcd394d4f2e8;p=thirdparty%2Flxc.git utils: add lxc_safe_ulong() Signed-off-by: Christian Brauner --- diff --git a/src/lxc/utils.c b/src/lxc/utils.c index cc7e80020..02a58c2f1 100644 --- a/src/lxc/utils.c +++ b/src/lxc/utils.c @@ -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; diff --git a/src/lxc/utils.h b/src/lxc/utils.h index 320aa6bf7..ea923b0dd 100644 --- a/src/lxc/utils.h +++ b/src/lxc/utils.h @@ -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);