From: Michel Normand Date: Thu, 29 Apr 2010 08:03:59 +0000 (+0200) Subject: report error if statefd parm is not a digit X-Git-Tag: lxc-0.7.0~102 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=501cbc717f4a6d9cace36ea78c88d9f00e9b7fdb;p=thirdparty%2Flxc.git report error if statefd parm is not a digit Signed-off-by: Michel Normand Signed-off-by: Daniel Lezcano --- diff --git a/src/lxc/arguments.c b/src/lxc/arguments.c index e495878d1..e3d62296a 100644 --- a/src/lxc/arguments.c +++ b/src/lxc/arguments.c @@ -230,3 +230,23 @@ extern char **lxc_arguments_dup(const char *file, struct lxc_arguments *args) return argv; } + +int lxc_arguments_str_to_int(struct lxc_arguments *args, const char *str) +{ + long val; + char *endptr; + + errno = 0; + val = strtol(str, &endptr, 10); + if (errno) { + lxc_error(args, "invalid statefd '%s' : %m", str); + return -1; + } + + if (*endptr) { + lxc_error(args, "invalid digit for statefd '%s'", str); + return -1; + } + + return (int)val; +} diff --git a/src/lxc/arguments.h b/src/lxc/arguments.h index 1c5de4a61..cee101006 100644 --- a/src/lxc/arguments.h +++ b/src/lxc/arguments.h @@ -78,6 +78,7 @@ extern int lxc_arguments_parse(struct lxc_arguments *args, int argc, char *const argv[]); extern char **lxc_arguments_dup(const char *file, struct lxc_arguments *args); +extern int lxc_arguments_str_to_int(struct lxc_arguments *args, const char *str); extern const char *lxc_strerror(int errnum); diff --git a/src/lxc/lxc_checkpoint.c b/src/lxc/lxc_checkpoint.c index 1ed5325fd..adc59f48a 100644 --- a/src/lxc/lxc_checkpoint.c +++ b/src/lxc/lxc_checkpoint.c @@ -60,15 +60,12 @@ static int my_parser(struct lxc_arguments* args, int c, char* arg) case 'p': args->flags = LXC_FLAG_PAUSE; break; case 'S': args->statefile = arg; break; case 'd': { - long val; - errno = 0; - val = strtol(arg, (char **)NULL, 10); - if (errno) { - lxc_error(args, "invalid statefd '%s' : %m\n", - arg); + int fd; + fd = lxc_arguments_str_to_int(args, arg); + if (fd < 0) return -1; - } - args->statefd = (int)val; + + args->statefd = fd; break; } } diff --git a/src/lxc/lxc_restart.c b/src/lxc/lxc_restart.c index ae03d0fe3..e44bd1b54 100644 --- a/src/lxc/lxc_restart.c +++ b/src/lxc/lxc_restart.c @@ -63,15 +63,12 @@ static int my_parser(struct lxc_arguments* args, int c, char* arg) case 'p': args->flags = LXC_FLAG_PAUSE; break; case 's': return lxc_config_define_add(&defines, arg); case 'd': { - long val; - errno = 0; - val = strtol(arg, (char **)NULL, 10); - if (errno) { - lxc_error(args, "invalid statefd '%s' : %m\n", - arg); + int fd; + fd = lxc_arguments_str_to_int(args, arg); + if (fd < 0) return -1; - } - args->statefd = (int)val; + + args->statefd = fd; break; } }