]> git.ipfire.org Git - thirdparty/lxc.git/commitdiff
report error if statefd parm is not a digit
authorMichel Normand <normand@fr.ibm.com>
Thu, 29 Apr 2010 08:03:59 +0000 (10:03 +0200)
committerDaniel Lezcano <dlezcano@fr.ibm.com>
Thu, 29 Apr 2010 08:03:59 +0000 (10:03 +0200)
Signed-off-by: Michel Normand <normand@fr.ibm.com>
Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
src/lxc/arguments.c
src/lxc/arguments.h
src/lxc/lxc_checkpoint.c
src/lxc/lxc_restart.c

index e495878d16072516d4a977953afcb75e671237f2..e3d62296ae5e128bca300af769a3196ba7e09d79 100644 (file)
@@ -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;
+}
index 1c5de4a61d00ff87733f38da439ce8fe77753d3e..cee10100643cadad65e370c9e54b9517f113b3e8 100644 (file)
@@ -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);
 
index 1ed5325fdadb0bdcd7b53fd381b5a35dec5911b2..adc59f48aa6929498b4da674a612306ae2cde0c6 100644 (file)
@@ -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;
                }
        }
index ae03d0fe333094a3ce6e46ae0bbe3f60cf60f600..e44bd1b54eee3d13f0dba7d11eee9638bb024059 100644 (file)
@@ -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;
                }
        }