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;
+}
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);
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;
}
}
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;
}
}