Merge pull request #1139 from brauner/2016-08-18/use_exit_in_all_tools

tools: use exit(EXIT_*) everywhere
This commit is contained in:
Serge Hallyn 2016-08-26 06:15:37 -04:00 committed by GitHub
commit fe8ded6d57
18 changed files with 140 additions and 139 deletions

View File

@ -334,17 +334,17 @@ int main(int argc, char *argv[])
struct lxc_list *cmd_group; struct lxc_list *cmd_group;
if (lxc_arguments_parse(&my_args, argc, argv)) if (lxc_arguments_parse(&my_args, argc, argv))
return 1; exit(EXIT_FAILURE);
if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority, if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority,
my_args.progname, my_args.quiet, my_args.lxcpath[0])) my_args.progname, my_args.quiet, my_args.lxcpath[0]))
return 1; exit(EXIT_FAILURE);
lxc_log_options_no_override(); lxc_log_options_no_override();
count = list_defined_containers(my_args.lxcpath[0], NULL, &containers); count = list_defined_containers(my_args.lxcpath[0], NULL, &containers);
if (count < 0) if (count < 0)
return 1; exit(EXIT_FAILURE);
if (!my_args.all) { if (!my_args.all) {
/* Allocate an array for our container group lists */ /* Allocate an array for our container group lists */
@ -522,5 +522,5 @@ int main(int argc, char *argv[])
toss_list( cmd_groups_list ); toss_list( cmd_groups_list );
free(containers); free(containers);
return 0; exit(EXIT_SUCCESS);
} }

View File

@ -69,47 +69,47 @@ int main(int argc, char *argv[])
struct lxc_container *c; struct lxc_container *c;
if (lxc_arguments_parse(&my_args, argc, argv)) if (lxc_arguments_parse(&my_args, argc, argv))
return 1; exit(EXIT_FAILURE);
if (!my_args.log_file) if (!my_args.log_file)
my_args.log_file = "none"; my_args.log_file = "none";
if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority, if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority,
my_args.progname, my_args.quiet, my_args.lxcpath[0])) my_args.progname, my_args.quiet, my_args.lxcpath[0]))
return 1; exit(EXIT_FAILURE);
lxc_log_options_no_override(); lxc_log_options_no_override();
state_object = my_args.argv[0]; state_object = my_args.argv[0];
c = lxc_container_new(my_args.name, my_args.lxcpath[0]); c = lxc_container_new(my_args.name, my_args.lxcpath[0]);
if (!c) if (!c)
return 1; exit(EXIT_FAILURE);
if (my_args.rcfile) { if (my_args.rcfile) {
c->clear_config(c); c->clear_config(c);
if (!c->load_config(c, my_args.rcfile)) { if (!c->load_config(c, my_args.rcfile)) {
ERROR("Failed to load rcfile"); ERROR("Failed to load rcfile");
lxc_container_put(c); lxc_container_put(c);
return 1; exit(EXIT_FAILURE);
} }
c->configfile = strdup(my_args.rcfile); c->configfile = strdup(my_args.rcfile);
if (!c->configfile) { if (!c->configfile) {
ERROR("Out of memory setting new config filename"); ERROR("Out of memory setting new config filename");
lxc_container_put(c); lxc_container_put(c);
return 1; exit(EXIT_FAILURE);
} }
} }
if (!c->may_control(c)) { if (!c->may_control(c)) {
ERROR("Insufficent privileges to control %s:%s", my_args.lxcpath[0], my_args.name); ERROR("Insufficent privileges to control %s:%s", my_args.lxcpath[0], my_args.name);
lxc_container_put(c); lxc_container_put(c);
return 1; exit(EXIT_FAILURE);
} }
if (!c->is_running(c)) { if (!c->is_running(c)) {
ERROR("'%s:%s' is not running", my_args.lxcpath[0], my_args.name); ERROR("'%s:%s' is not running", my_args.lxcpath[0], my_args.name);
lxc_container_put(c); lxc_container_put(c);
return 1; exit(EXIT_FAILURE);
} }
if ((my_args.argc) > 1) { if ((my_args.argc) > 1) {
@ -118,7 +118,7 @@ int main(int argc, char *argv[])
ERROR("failed to assign '%s' value to '%s' for '%s'", ERROR("failed to assign '%s' value to '%s' for '%s'",
value, state_object, my_args.name); value, state_object, my_args.name);
lxc_container_put(c); lxc_container_put(c);
return 1; exit(EXIT_FAILURE);
} }
} else { } else {
int len = 4096; int len = 4096;
@ -128,11 +128,11 @@ int main(int argc, char *argv[])
ERROR("failed to retrieve value of '%s' for '%s:%s'", ERROR("failed to retrieve value of '%s' for '%s:%s'",
state_object, my_args.lxcpath[0], my_args.name); state_object, my_args.lxcpath[0], my_args.name);
lxc_container_put(c); lxc_container_put(c);
return 1; exit(EXIT_FAILURE);
} }
printf("%*s", ret, buffer); printf("%*s", ret, buffer);
} }
lxc_container_put(c); lxc_container_put(c);
return 0; exit(EXIT_SUCCESS);
} }

View File

@ -198,21 +198,21 @@ int main(int argc, char *argv[])
bool ret; bool ret;
if (lxc_arguments_parse(&my_args, argc, argv)) if (lxc_arguments_parse(&my_args, argc, argv))
exit(1); exit(EXIT_FAILURE);
if (!my_args.log_file) if (!my_args.log_file)
my_args.log_file = "none"; my_args.log_file = "none";
if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority, if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority,
my_args.progname, my_args.quiet, my_args.lxcpath[0])) my_args.progname, my_args.quiet, my_args.lxcpath[0]))
exit(1); exit(EXIT_FAILURE);
lxc_log_options_no_override(); lxc_log_options_no_override();
c = lxc_container_new(my_args.name, my_args.lxcpath[0]); c = lxc_container_new(my_args.name, my_args.lxcpath[0]);
if (!c) { if (!c) {
fprintf(stderr, "System error loading %s\n", my_args.name); fprintf(stderr, "System error loading %s\n", my_args.name);
exit(1); exit(EXIT_FAILURE);
} }
if (my_args.rcfile) { if (my_args.rcfile) {
@ -220,26 +220,26 @@ int main(int argc, char *argv[])
if (!c->load_config(c, my_args.rcfile)) { if (!c->load_config(c, my_args.rcfile)) {
fprintf(stderr, "Failed to load rcfile\n"); fprintf(stderr, "Failed to load rcfile\n");
lxc_container_put(c); lxc_container_put(c);
exit(1); exit(EXIT_FAILURE);
} }
c->configfile = strdup(my_args.rcfile); c->configfile = strdup(my_args.rcfile);
if (!c->configfile) { if (!c->configfile) {
fprintf(stderr, "Out of memory setting new config filename\n"); fprintf(stderr, "Out of memory setting new config filename\n");
lxc_container_put(c); lxc_container_put(c);
exit(1); exit(EXIT_FAILURE);
} }
} }
if (!c->may_control(c)) { if (!c->may_control(c)) {
fprintf(stderr, "Insufficent privileges to control %s\n", my_args.name); fprintf(stderr, "Insufficent privileges to control %s\n", my_args.name);
lxc_container_put(c); lxc_container_put(c);
exit(1); exit(EXIT_FAILURE);
} }
if (!c->is_defined(c)) { if (!c->is_defined(c)) {
fprintf(stderr, "%s is not defined\n", my_args.name); fprintf(stderr, "%s is not defined\n", my_args.name);
lxc_container_put(c); lxc_container_put(c);
exit(1); exit(EXIT_FAILURE);
} }
@ -248,5 +248,8 @@ int main(int argc, char *argv[])
else else
ret = checkpoint(c); ret = checkpoint(c);
return !ret; if (!ret)
exit(EXIT_FAILURE);
exit(EXIT_SUCCESS);
} }

View File

@ -89,7 +89,7 @@ static void usage(const char *me)
printf(" -p: use container orig from custom lxcpath\n"); printf(" -p: use container orig from custom lxcpath\n");
printf(" -P: create container new in custom lxcpath\n"); printf(" -P: create container new in custom lxcpath\n");
printf(" -R: rename existing container\n"); printf(" -R: rename existing container\n");
exit(1); exit(EXIT_SUCCESS);
} }
static struct option options[] = { static struct option options[] = {

View File

@ -45,7 +45,7 @@ static void usage(char *me)
{ {
printf("Usage: %s -l: list all available configuration items\n", me); printf("Usage: %s -l: list all available configuration items\n", me);
printf(" %s item: print configuration item\n", me); printf(" %s item: print configuration item\n", me);
exit(1); exit(EXIT_SUCCESS);
} }
static void list_config_items(void) static void list_config_items(void)
@ -54,7 +54,7 @@ static void list_config_items(void)
for (i = &items[0]; i->name; i++) for (i = &items[0]; i->name; i++)
printf("%s\n", i->name); printf("%s\n", i->name);
exit(0); exit(EXIT_SUCCESS);
} }
int main(int argc, char *argv[]) int main(int argc, char *argv[])
@ -73,9 +73,9 @@ int main(int argc, char *argv[])
printf("%s\n", value); printf("%s\n", value);
else else
printf("%s is not set.\n", argv[1]); printf("%s is not set.\n", argv[1]);
exit(0); exit(EXIT_SUCCESS);
} }
} }
printf("Unknown configuration item: %s\n", argv[1]); printf("Unknown configuration item: %s\n", argv[1]);
exit(1); exit(EXIT_FAILURE);
} }

View File

@ -146,5 +146,5 @@ int main(int argc, char *argv[])
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
lxc_container_put(c); lxc_container_put(c);
return EXIT_SUCCESS; exit(EXIT_SUCCESS);
} }

View File

@ -66,7 +66,7 @@ static bool is_interface(const char* dev_name, pid_t pid)
if (p < 0) { if (p < 0) {
SYSERROR("failed to fork task."); SYSERROR("failed to fork task.");
exit(1); exit(EXIT_FAILURE);
} }
if (p == 0) { if (p == 0) {
@ -86,10 +86,10 @@ static bool is_interface(const char* dev_name, pid_t pid)
/* Iterate through the interfaces */ /* Iterate through the interfaces */
for (tempIfAddr = interfaceArray; tempIfAddr != NULL; tempIfAddr = tempIfAddr->ifa_next) { for (tempIfAddr = interfaceArray; tempIfAddr != NULL; tempIfAddr = tempIfAddr->ifa_next) {
if (strcmp(tempIfAddr->ifa_name, dev_name) == 0) { if (strcmp(tempIfAddr->ifa_name, dev_name) == 0) {
exit(0); exit(EXIT_SUCCESS);
} }
} }
exit(1); exit(EXIT_FAILURE);
} }
if (wait_for_pid(p) == 0) { if (wait_for_pid(p) == 0) {
@ -106,7 +106,7 @@ int main(int argc, char *argv[])
if (geteuid() != 0) { if (geteuid() != 0) {
ERROR("%s must be run as root", argv[0]); ERROR("%s must be run as root", argv[0]);
exit(1); exit(EXIT_FAILURE);
} }
if (lxc_arguments_parse(&my_args, argc, argv)) if (lxc_arguments_parse(&my_args, argc, argv))
@ -184,9 +184,9 @@ int main(int argc, char *argv[])
ERROR("Error: Please use add or del (Please see --help output)"); ERROR("Error: Please use add or del (Please see --help output)");
goto err1; goto err1;
} }
exit(0); exit(EXIT_SUCCESS);
err1: err1:
lxc_container_put(c); lxc_container_put(c);
err: err:
exit(ret); exit(EXIT_FAILURE);
} }

View File

@ -102,14 +102,14 @@ int main(int argc, char *argv[])
lxc_list_init(&defines); lxc_list_init(&defines);
if (lxc_caps_init()) if (lxc_caps_init())
return 1; exit(EXIT_FAILURE);
if (lxc_arguments_parse(&my_args, argc, argv)) if (lxc_arguments_parse(&my_args, argc, argv))
return 1; exit(EXIT_FAILURE);
if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority, if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority,
my_args.progname, my_args.quiet, my_args.lxcpath[0])) my_args.progname, my_args.quiet, my_args.lxcpath[0]))
return 1; exit(EXIT_FAILURE);
lxc_log_options_no_override(); lxc_log_options_no_override();
/* rcfile is specified in the cli option */ /* rcfile is specified in the cli option */
@ -121,7 +121,7 @@ int main(int argc, char *argv[])
rc = asprintf(&rcfile, "%s/%s/config", my_args.lxcpath[0], my_args.name); rc = asprintf(&rcfile, "%s/%s/config", my_args.lxcpath[0], my_args.name);
if (rc == -1) { if (rc == -1) {
SYSERROR("failed to allocate memory"); SYSERROR("failed to allocate memory");
return 1; exit(EXIT_FAILURE);
} }
/* container configuration does not exist */ /* container configuration does not exist */
@ -134,16 +134,16 @@ int main(int argc, char *argv[])
conf = lxc_conf_init(); conf = lxc_conf_init();
if (!conf) { if (!conf) {
ERROR("failed to initialize configuration"); ERROR("failed to initialize configuration");
return 1; exit(EXIT_FAILURE);
} }
if (rcfile && lxc_config_read(rcfile, conf, NULL)) { if (rcfile && lxc_config_read(rcfile, conf, NULL)) {
ERROR("failed to read configuration file"); ERROR("failed to read configuration file");
return 1; exit(EXIT_FAILURE);
} }
if (lxc_config_define_load(&defines, conf)) if (lxc_config_define_load(&defines, conf))
return 1; exit(EXIT_FAILURE);
if (my_args.uid) if (my_args.uid)
conf->init_uid = my_args.uid; conf->init_uid = my_args.uid;
@ -156,6 +156,6 @@ int main(int argc, char *argv[])
lxc_conf_free(conf); lxc_conf_free(conf);
if (ret < 0) if (ret < 0)
return 1; exit(EXIT_FAILURE);
return ret; exit(EXIT_SUCCESS);
} }

View File

@ -59,20 +59,20 @@ int main(int argc, char *argv[])
struct lxc_container *c; struct lxc_container *c;
if (lxc_arguments_parse(&my_args, argc, argv)) if (lxc_arguments_parse(&my_args, argc, argv))
exit(1); exit(EXIT_FAILURE);
if (!my_args.log_file) if (!my_args.log_file)
my_args.log_file = "none"; my_args.log_file = "none";
if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority, if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority,
my_args.progname, my_args.quiet, my_args.lxcpath[0])) my_args.progname, my_args.quiet, my_args.lxcpath[0]))
exit(1); exit(EXIT_FAILURE);
lxc_log_options_no_override(); lxc_log_options_no_override();
c = lxc_container_new(my_args.name, my_args.lxcpath[0]); c = lxc_container_new(my_args.name, my_args.lxcpath[0]);
if (!c) { if (!c) {
ERROR("No such container: %s:%s", my_args.lxcpath[0], my_args.name); ERROR("No such container: %s:%s", my_args.lxcpath[0], my_args.name);
exit(1); exit(EXIT_FAILURE);
} }
if (my_args.rcfile) { if (my_args.rcfile) {
@ -80,29 +80,29 @@ int main(int argc, char *argv[])
if (!c->load_config(c, my_args.rcfile)) { if (!c->load_config(c, my_args.rcfile)) {
ERROR("Failed to load rcfile"); ERROR("Failed to load rcfile");
lxc_container_put(c); lxc_container_put(c);
exit(1); exit(EXIT_FAILURE);
} }
c->configfile = strdup(my_args.rcfile); c->configfile = strdup(my_args.rcfile);
if (!c->configfile) { if (!c->configfile) {
ERROR("Out of memory setting new config filename"); ERROR("Out of memory setting new config filename");
lxc_container_put(c); lxc_container_put(c);
exit(1); exit(EXIT_FAILURE);
} }
} }
if (!c->may_control(c)) { if (!c->may_control(c)) {
ERROR("Insufficent privileges to control %s:%s", my_args.lxcpath[0], my_args.name); ERROR("Insufficent privileges to control %s:%s", my_args.lxcpath[0], my_args.name);
lxc_container_put(c); lxc_container_put(c);
exit(1); exit(EXIT_FAILURE);
} }
if (!c->freeze(c)) { if (!c->freeze(c)) {
ERROR("Failed to freeze %s:%s", my_args.lxcpath[0], my_args.name); ERROR("Failed to freeze %s:%s", my_args.lxcpath[0], my_args.name);
lxc_container_put(c); lxc_container_put(c);
exit(1); exit(EXIT_FAILURE);
} }
lxc_container_put(c); lxc_container_put(c);
exit(0); exit(EXIT_SUCCESS);
} }

View File

@ -396,18 +396,18 @@ int main(int argc, char *argv[])
int ret = EXIT_FAILURE; int ret = EXIT_FAILURE;
if (lxc_arguments_parse(&my_args, argc, argv)) if (lxc_arguments_parse(&my_args, argc, argv))
return ret; exit(ret);
if (!my_args.log_file) if (!my_args.log_file)
my_args.log_file = "none"; my_args.log_file = "none";
if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority, if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority,
my_args.progname, my_args.quiet, my_args.lxcpath[0])) my_args.progname, my_args.quiet, my_args.lxcpath[0]))
return ret; exit(ret);
lxc_log_options_no_override(); lxc_log_options_no_override();
if (print_info(my_args.name, my_args.lxcpath[0]) == 0) if (print_info(my_args.name, my_args.lxcpath[0]) == 0)
ret = EXIT_SUCCESS; ret = EXIT_SUCCESS;
return ret; exit(ret);
} }

View File

@ -92,17 +92,17 @@ int main(int argc, char *argv[])
nfds_t nfds; nfds_t nfds;
int len, rc_main, rc_snp, i; int len, rc_main, rc_snp, i;
rc_main = 0; rc_main = EXIT_FAILURE;
if (lxc_arguments_parse(&my_args, argc, argv)) if (lxc_arguments_parse(&my_args, argc, argv))
return 1; exit(rc_main);
if (!my_args.log_file) if (!my_args.log_file)
my_args.log_file = "none"; my_args.log_file = "none";
if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority, if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority,
my_args.progname, my_args.quiet, my_args.lxcpath[0])) my_args.progname, my_args.quiet, my_args.lxcpath[0]))
return 1; exit(rc_main);
lxc_log_options_no_override(); lxc_log_options_no_override();
if (quit_monitord) { if (quit_monitord) {
@ -124,32 +124,29 @@ int main(int argc, char *argv[])
} }
close(fd); close(fd);
} }
return ret; exit(ret);
} }
len = strlen(my_args.name) + 3; len = strlen(my_args.name) + 3;
regexp = malloc(len + 3); regexp = malloc(len + 3);
if (!regexp) { if (!regexp) {
ERROR("failed to allocate memory"); ERROR("failed to allocate memory");
return 1; exit(rc_main);
} }
rc_snp = snprintf(regexp, len, "^%s$", my_args.name); rc_snp = snprintf(regexp, len, "^%s$", my_args.name);
if (rc_snp < 0 || rc_snp >= len) { if (rc_snp < 0 || rc_snp >= len) {
ERROR("Name too long"); ERROR("Name too long");
rc_main = 1;
goto error; goto error;
} }
if (regcomp(&preg, regexp, REG_NOSUB|REG_EXTENDED)) { if (regcomp(&preg, regexp, REG_NOSUB|REG_EXTENDED)) {
ERROR("failed to compile the regex '%s'", my_args.name); ERROR("failed to compile the regex '%s'", my_args.name);
rc_main = 1;
goto error; goto error;
} }
fds = malloc(my_args.lxcpath_cnt * sizeof(struct pollfd)); fds = malloc(my_args.lxcpath_cnt * sizeof(struct pollfd));
if (!fds) { if (!fds) {
SYSERROR("out of memory"); SYSERROR("out of memory");
rc_main = -1;
goto cleanup; goto cleanup;
} }
@ -162,7 +159,6 @@ int main(int argc, char *argv[])
fd = lxc_monitor_open(my_args.lxcpath[i]); fd = lxc_monitor_open(my_args.lxcpath[i]);
if (fd < 0) { if (fd < 0) {
close_fds(fds, i); close_fds(fds, i);
rc_main = 1;
goto cleanup; goto cleanup;
} }
fds[i].fd = fd; fds[i].fd = fd;
@ -174,7 +170,6 @@ int main(int argc, char *argv[])
for (;;) { for (;;) {
if (lxc_monitor_read_fdset(fds, nfds, &msg, -1) < 0) { if (lxc_monitor_read_fdset(fds, nfds, &msg, -1) < 0) {
rc_main = 1;
goto close_and_clean; goto close_and_clean;
} }
@ -196,6 +191,7 @@ int main(int argc, char *argv[])
break; break;
} }
} }
rc_main = 0;
close_and_clean: close_and_clean:
close_fds(fds, nfds); close_fds(fds, nfds);
@ -207,5 +203,5 @@ cleanup:
error: error:
free(regexp); free(regexp);
return rc_main; exit(rc_main);
} }

View File

@ -203,7 +203,7 @@ Options :\n\
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
int err = 1; int err = EXIT_FAILURE;
struct lxc_conf *conf; struct lxc_conf *conf;
char *const *args; char *const *args;
char *rcfile = NULL; char *rcfile = NULL;
@ -216,10 +216,10 @@ int main(int argc, char *argv[])
lxc_list_init(&defines); lxc_list_init(&defines);
if (lxc_caps_init()) if (lxc_caps_init())
return err; exit(err);
if (lxc_arguments_parse(&my_args, argc, argv)) if (lxc_arguments_parse(&my_args, argc, argv))
return err; exit(err);
if (!my_args.argc) if (!my_args.argc)
args = default_args; args = default_args;
@ -228,7 +228,7 @@ int main(int argc, char *argv[])
if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority, if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority,
my_args.progname, my_args.quiet, my_args.lxcpath[0])) my_args.progname, my_args.quiet, my_args.lxcpath[0]))
return err; exit(err);
lxc_log_options_no_override(); lxc_log_options_no_override();
const char *lxcpath = my_args.lxcpath[0]; const char *lxcpath = my_args.lxcpath[0];
@ -245,13 +245,13 @@ int main(int argc, char *argv[])
c = lxc_container_new(my_args.name, lxcpath); c = lxc_container_new(my_args.name, lxcpath);
if (!c) { if (!c) {
ERROR("Failed to create lxc_container"); ERROR("Failed to create lxc_container");
return err; exit(err);
} }
c->clear_config(c); c->clear_config(c);
if (!c->load_config(c, rcfile)) { if (!c->load_config(c, rcfile)) {
ERROR("Failed to load rcfile"); ERROR("Failed to load rcfile");
lxc_container_put(c); lxc_container_put(c);
return err; exit(err);
} }
} else { } else {
int rc; int rc;
@ -259,7 +259,7 @@ int main(int argc, char *argv[])
rc = asprintf(&rcfile, "%s/%s/config", lxcpath, my_args.name); rc = asprintf(&rcfile, "%s/%s/config", lxcpath, my_args.name);
if (rc == -1) { if (rc == -1) {
SYSERROR("failed to allocate memory"); SYSERROR("failed to allocate memory");
return err; exit(err);
} }
INFO("using rcfile %s", rcfile); INFO("using rcfile %s", rcfile);
@ -271,7 +271,7 @@ int main(int argc, char *argv[])
c = lxc_container_new(my_args.name, lxcpath); c = lxc_container_new(my_args.name, lxcpath);
if (!c) { if (!c) {
ERROR("Failed to create lxc_container"); ERROR("Failed to create lxc_container");
return err; exit(err);
} }
} }
@ -336,9 +336,9 @@ int main(int argc, char *argv[])
c->want_close_all_fds(c, true); c->want_close_all_fds(c, true);
if (args == default_args) if (args == default_args)
err = c->start(c, 0, NULL) ? 0 : 1; err = c->start(c, 0, NULL) ? EXIT_SUCCESS : EXIT_FAILURE;
else else
err = c->start(c, 0, args) ? 0 : 1; err = c->start(c, 0, args) ? EXIT_SUCCESS : EXIT_FAILURE;
if (err) { if (err) {
ERROR("The container failed to start."); ERROR("The container failed to start.");
@ -348,10 +348,10 @@ int main(int argc, char *argv[])
"--logfile and --logpriority options."); "--logfile and --logpriority options.");
err = c->error_num; err = c->error_num;
lxc_container_put(c); lxc_container_put(c);
return err; exit(err);
} }
out: out:
lxc_container_put(c); lxc_container_put(c);
return err; exit(err);
} }

View File

@ -143,14 +143,14 @@ int main(int argc, char *argv[])
{ {
struct lxc_container *c; struct lxc_container *c;
bool s; bool s;
int ret = 1; int ret = EXIT_FAILURE;
if (lxc_arguments_parse(&my_args, argc, argv)) if (lxc_arguments_parse(&my_args, argc, argv))
return 1; exit(ret);
if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority, if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority,
my_args.progname, my_args.quiet, my_args.lxcpath[0])) my_args.progname, my_args.quiet, my_args.lxcpath[0]))
return 1; exit(ret);
lxc_log_options_no_override(); lxc_log_options_no_override();
/* Set default timeout */ /* Set default timeout */
@ -170,33 +170,35 @@ int main(int argc, char *argv[])
/* some checks */ /* some checks */
if (!my_args.hardstop && my_args.timeout < -1) { if (!my_args.hardstop && my_args.timeout < -1) {
fprintf(stderr, "invalid timeout\n"); fprintf(stderr, "invalid timeout\n");
return 1; exit(ret);
} }
if (my_args.hardstop && my_args.nokill) { if (my_args.hardstop && my_args.nokill) {
fprintf(stderr, "-k can't be used with --nokill\n"); fprintf(stderr, "-k can't be used with --nokill\n");
return 1; exit(ret);
} }
if (my_args.hardstop && my_args.reboot) { if (my_args.hardstop && my_args.reboot) {
fprintf(stderr, "-k can't be used with -r\n"); fprintf(stderr, "-k can't be used with -r\n");
return 1; exit(ret);
} }
if (my_args.hardstop && my_args.timeout) { if (my_args.hardstop && my_args.timeout) {
fprintf(stderr, "-k doesn't allow timeouts\n"); fprintf(stderr, "-k doesn't allow timeouts\n");
return 1; exit(ret);
} }
if (my_args.nolock && !my_args.hardstop) { if (my_args.nolock && !my_args.hardstop) {
fprintf(stderr, "--nolock may only be used with -k\n"); fprintf(stderr, "--nolock may only be used with -k\n");
return 1; exit(ret);
} }
/* shortcut - if locking is bogus, we should be able to kill /* shortcut - if locking is bogus, we should be able to kill
* containers at least */ * containers at least */
if (my_args.nolock) if (my_args.nolock) {
return lxc_cmd_stop(my_args.name, my_args.lxcpath[0]); ret = lxc_cmd_stop(my_args.name, my_args.lxcpath[0]);
exit(ret);
}
c = lxc_container_new(my_args.name, my_args.lxcpath[0]); c = lxc_container_new(my_args.name, my_args.lxcpath[0]);
if (!c) { if (!c) {
@ -224,19 +226,19 @@ int main(int argc, char *argv[])
if (!c->is_running(c)) { if (!c->is_running(c)) {
fprintf(stderr, "%s is not running\n", c->name); fprintf(stderr, "%s is not running\n", c->name);
ret = 2; ret = EXIT_FAILURE;
goto out; goto out;
} }
/* kill */ /* kill */
if (my_args.hardstop) { if (my_args.hardstop) {
ret = c->stop(c) ? 0 : 1; ret = c->stop(c) ? EXIT_SUCCESS : EXIT_FAILURE;
goto out; goto out;
} }
/* reboot */ /* reboot */
if (my_args.reboot) { if (my_args.reboot) {
ret = do_reboot_and_check(&my_args, c); ret = do_reboot_and_check(&my_args, c) < 0 ? EXIT_SUCCESS : EXIT_FAILURE;
goto out; goto out;
} }
@ -244,17 +246,16 @@ int main(int argc, char *argv[])
s = c->shutdown(c, my_args.timeout); s = c->shutdown(c, my_args.timeout);
if (!s) { if (!s) {
if (my_args.timeout == 0) if (my_args.timeout == 0)
ret = 0; ret = EXIT_SUCCESS;
else if (my_args.nokill) else if (my_args.nokill)
ret = 1; ret = EXIT_FAILURE;
else else
ret = c->stop(c) ? 0 : 1; ret = c->stop(c) ? EXIT_SUCCESS : EXIT_FAILURE;
} else } else {
ret = 0; ret = EXIT_SUCCESS;
}
out: out:
lxc_container_put(c); lxc_container_put(c);
if (ret < 0) exit(ret);
return 1;
return ret;
} }

View File

@ -506,5 +506,5 @@ int main(int argc, char *argv[])
err1: err1:
lxc_mainloop_close(&descr); lxc_mainloop_close(&descr);
out: out:
return ret; exit(EXIT_FAILURE);
} }

View File

@ -57,26 +57,26 @@ int main(int argc, char *argv[])
struct lxc_container *c; struct lxc_container *c;
if (lxc_arguments_parse(&my_args, argc, argv)) if (lxc_arguments_parse(&my_args, argc, argv))
exit(1); exit(EXIT_FAILURE);
if (!my_args.log_file) if (!my_args.log_file)
my_args.log_file = "none"; my_args.log_file = "none";
if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority, if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority,
my_args.progname, my_args.quiet, my_args.lxcpath[0])) my_args.progname, my_args.quiet, my_args.lxcpath[0]))
exit(1); exit(EXIT_FAILURE);
lxc_log_options_no_override(); lxc_log_options_no_override();
c = lxc_container_new(my_args.name, my_args.lxcpath[0]); c = lxc_container_new(my_args.name, my_args.lxcpath[0]);
if (!c) { if (!c) {
ERROR("No such container: %s:%s", my_args.lxcpath[0], my_args.name); ERROR("No such container: %s:%s", my_args.lxcpath[0], my_args.name);
exit(1); exit(EXIT_FAILURE);
} }
if (!c->may_control(c)) { if (!c->may_control(c)) {
ERROR("Insufficent privileges to control %s:%s", my_args.lxcpath[0], my_args.name); ERROR("Insufficent privileges to control %s:%s", my_args.lxcpath[0], my_args.name);
lxc_container_put(c); lxc_container_put(c);
exit(1); exit(EXIT_FAILURE);
} }
if (my_args.rcfile) { if (my_args.rcfile) {
@ -84,23 +84,23 @@ int main(int argc, char *argv[])
if (!c->load_config(c, my_args.rcfile)) { if (!c->load_config(c, my_args.rcfile)) {
ERROR("Failed to load rcfile"); ERROR("Failed to load rcfile");
lxc_container_put(c); lxc_container_put(c);
exit(1); exit(EXIT_FAILURE);
} }
c->configfile = strdup(my_args.rcfile); c->configfile = strdup(my_args.rcfile);
if (!c->configfile) { if (!c->configfile) {
ERROR("Out of memory setting new config filename"); ERROR("Out of memory setting new config filename");
lxc_container_put(c); lxc_container_put(c);
exit(1); exit(EXIT_FAILURE);
} }
} }
if (!c->unfreeze(c)) { if (!c->unfreeze(c)) {
ERROR("Failed to unfreeze %s:%s", my_args.lxcpath[0], my_args.name); ERROR("Failed to unfreeze %s:%s", my_args.lxcpath[0], my_args.name);
lxc_container_put(c); lxc_container_put(c);
exit(1); exit(EXIT_FAILURE);
} }
lxc_container_put(c); lxc_container_put(c);
exit(0); exit(EXIT_SUCCESS);
} }

View File

@ -77,7 +77,7 @@ static void usage(char *cmd)
fprintf(stderr, "\t -H <hostname>: Set the hostname in the container\n"); fprintf(stderr, "\t -H <hostname>: Set the hostname in the container\n");
fprintf(stderr, "\t -d : Daemonize (do not wait for container to exit)\n"); fprintf(stderr, "\t -d : Daemonize (do not wait for container to exit)\n");
fprintf(stderr, "\t -M : reMount default fs inside container (/proc /dev/shm /dev/mqueue)\n"); fprintf(stderr, "\t -M : reMount default fs inside container (/proc /dev/shm /dev/mqueue)\n");
_exit(1); _exit(EXIT_SUCCESS);
} }
static bool lookup_user(const char *optarg, uid_t *uid) static bool lookup_user(const char *optarg, uid_t *uid)
@ -134,13 +134,13 @@ static int do_start(void *arg)
if ((flags & CLONE_NEWUTS) && want_hostname) if ((flags & CLONE_NEWUTS) && want_hostname)
if (sethostname(want_hostname, strlen(want_hostname)) < 0) { if (sethostname(want_hostname, strlen(want_hostname)) < 0) {
ERROR("failed to set hostname %s: %s", want_hostname, strerror(errno)); ERROR("failed to set hostname %s: %s", want_hostname, strerror(errno));
exit(1); exit(EXIT_FAILURE);
} }
// Setuid is useful even without a new user id space // Setuid is useful even without a new user id space
if (start_arg->setuid && setuid(uid)) { if (start_arg->setuid && setuid(uid)) {
ERROR("failed to set uid %d: %s", uid, strerror(errno)); ERROR("failed to set uid %d: %s", uid, strerror(errno));
exit(1); exit(EXIT_FAILURE);
} }
execvp(args[0], args); execvp(args[0], args);
@ -177,7 +177,7 @@ int main(int argc, char *argv[])
case 'i': case 'i':
if (!(tmpif = malloc(sizeof(*tmpif)))) { if (!(tmpif = malloc(sizeof(*tmpif)))) {
perror("malloc"); perror("malloc");
exit(1); exit(EXIT_FAILURE);
} }
tmpif->mi_ifname = optarg; tmpif->mi_ifname = optarg;
tmpif->mi_next = my_iflist; tmpif->mi_next = my_iflist;
@ -197,21 +197,21 @@ int main(int argc, char *argv[])
break; break;
case 'u': case 'u':
if (!lookup_user(optarg, &uid)) if (!lookup_user(optarg, &uid))
return 1; exit(EXIT_FAILURE);
start_arg.setuid = true; start_arg.setuid = true;
} }
} }
if (argv[optind] == NULL) { if (argv[optind] == NULL) {
ERROR("a command to execute in the new namespace is required"); ERROR("a command to execute in the new namespace is required");
return 1; exit(EXIT_FAILURE);
} }
args = &argv[optind]; args = &argv[optind];
ret = lxc_caps_init(); ret = lxc_caps_init();
if (ret) if (ret)
return 1; exit(EXIT_FAILURE);
ret = lxc_fill_namespace_flags(namespaces, &flags); ret = lxc_fill_namespace_flags(namespaces, &flags);
if (ret) if (ret)
@ -219,23 +219,23 @@ int main(int argc, char *argv[])
if (!(flags & CLONE_NEWNET) && my_iflist) { if (!(flags & CLONE_NEWNET) && my_iflist) {
ERROR("-i <interfacename> needs -s NETWORK option"); ERROR("-i <interfacename> needs -s NETWORK option");
return 1; exit(EXIT_FAILURE);
} }
if (!(flags & CLONE_NEWUTS) && start_arg.want_hostname) { if (!(flags & CLONE_NEWUTS) && start_arg.want_hostname) {
ERROR("-H <hostname> needs -s UTSNAME option"); ERROR("-H <hostname> needs -s UTSNAME option");
return 1; exit(EXIT_FAILURE);
} }
if (!(flags & CLONE_NEWNS) && start_arg.want_default_mounts) { if (!(flags & CLONE_NEWNS) && start_arg.want_default_mounts) {
ERROR("-M needs -s MOUNT option"); ERROR("-M needs -s MOUNT option");
return 1; exit(EXIT_FAILURE);
} }
pid = lxc_clone(do_start, &start_arg, flags); pid = lxc_clone(do_start, &start_arg, flags);
if (pid < 0) { if (pid < 0) {
ERROR("failed to clone"); ERROR("failed to clone");
return 1; exit(EXIT_FAILURE);
} }
if (my_iflist) { if (my_iflist) {
@ -246,12 +246,13 @@ int main(int argc, char *argv[])
} }
if (daemonize) if (daemonize)
exit(0); exit(EXIT_SUCCESS);
if (waitpid(pid, &status, 0) < 0) { if (waitpid(pid, &status, 0) < 0) {
ERROR("failed to wait for '%d'", pid); ERROR("failed to wait for '%d'", pid);
return 1; exit(EXIT_FAILURE);
} }
return lxc_error_set_and_log(pid, status); /* Call exit() directly on this function because it retuns an exit code. */
exit(lxc_error_set_and_log(pid, status));
} }

View File

@ -71,7 +71,7 @@ static void usage(const char *name)
printf(" Note: This program uses newuidmap(2) and newgidmap(2).\n"); printf(" Note: This program uses newuidmap(2) and newgidmap(2).\n");
printf(" As such, /etc/subuid and /etc/subgid must grant the\n"); printf(" As such, /etc/subuid and /etc/subgid must grant the\n");
printf(" calling user permission to use the mapped ranges\n"); printf(" calling user permission to use the mapped ranges\n");
exit(1); exit(EXIT_SUCCESS);
} }
static void opentty(const char * tty, int which) { static void opentty(const char * tty, int which) {
@ -282,7 +282,7 @@ int main(int argc, char *argv[])
ret = readlink("/proc/self/fd/0", ttyname0, sizeof(ttyname0)); ret = readlink("/proc/self/fd/0", ttyname0, sizeof(ttyname0));
if (ret < 0) { if (ret < 0) {
perror("unable to open stdin."); perror("unable to open stdin.");
exit(1); exit(EXIT_FAILURE);
} }
ret = readlink("/proc/self/fd/1", ttyname1, sizeof(ttyname1)); ret = readlink("/proc/self/fd/1", ttyname1, sizeof(ttyname1));
if (ret < 0) { if (ret < 0) {
@ -310,7 +310,7 @@ int main(int argc, char *argv[])
if (lxc_list_empty(&active_map)) { if (lxc_list_empty(&active_map)) {
if (find_default_map()) { if (find_default_map()) {
fprintf(stderr, "You have no allocated subuids or subgids\n"); fprintf(stderr, "You have no allocated subuids or subgids\n");
exit(1); exit(EXIT_FAILURE);
} }
} }
@ -323,7 +323,7 @@ int main(int argc, char *argv[])
if (pipe(pipe1) < 0 || pipe(pipe2) < 0) { if (pipe(pipe1) < 0 || pipe(pipe2) < 0) {
perror("pipe"); perror("pipe");
exit(1); exit(EXIT_FAILURE);
} }
if ((pid = fork()) == 0) { if ((pid = fork()) == 0) {
// Child. // Child.
@ -342,15 +342,15 @@ int main(int argc, char *argv[])
buf[0] = '1'; buf[0] = '1';
if (write(pipe1[1], buf, 1) < 1) { if (write(pipe1[1], buf, 1) < 1) {
perror("write pipe"); perror("write pipe");
exit(1); exit(EXIT_FAILURE);
} }
if (read(pipe2[0], buf, 1) < 1) { if (read(pipe2[0], buf, 1) < 1) {
perror("read pipe"); perror("read pipe");
exit(1); exit(EXIT_FAILURE);
} }
if (buf[0] != '1') { if (buf[0] != '1') {
fprintf(stderr, "parent had an error, child exiting\n"); fprintf(stderr, "parent had an error, child exiting\n");
exit(1); exit(EXIT_FAILURE);
} }
close(pipe1[1]); close(pipe1[1]);
@ -362,7 +362,7 @@ int main(int argc, char *argv[])
close(pipe2[0]); close(pipe2[0]);
if (read(pipe1[0], buf, 1) < 1) { if (read(pipe1[0], buf, 1) < 1) {
perror("read pipe"); perror("read pipe");
exit(1); exit(EXIT_FAILURE);
} }
buf[0] = '1'; buf[0] = '1';
@ -373,12 +373,12 @@ int main(int argc, char *argv[])
} }
if (write(pipe2[1], buf, 1) < 0) { if (write(pipe2[1], buf, 1) < 0) {
perror("write to pipe"); perror("write to pipe");
exit(1); exit(EXIT_FAILURE);
} }
if ((ret = waitpid(pid, &status, __WALL)) < 0) { if ((ret = waitpid(pid, &status, __WALL)) < 0) {
printf("waitpid() returns %d, errno %d\n", ret, errno); printf("waitpid() returns %d, errno %d\n", ret, errno);
exit(1); exit(EXIT_FAILURE);
} }
exit(WEXITSTATUS(status)); exit(WEXITSTATUS(status));

View File

@ -85,24 +85,24 @@ int main(int argc, char *argv[])
struct lxc_container *c; struct lxc_container *c;
if (lxc_arguments_parse(&my_args, argc, argv)) if (lxc_arguments_parse(&my_args, argc, argv))
return 1; exit(EXIT_FAILURE);
if (!my_args.log_file) if (!my_args.log_file)
my_args.log_file = "none"; my_args.log_file = "none";
if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority, if (lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority,
my_args.progname, my_args.quiet, my_args.lxcpath[0])) my_args.progname, my_args.quiet, my_args.lxcpath[0]))
return 1; exit(EXIT_FAILURE);
lxc_log_options_no_override(); lxc_log_options_no_override();
c = lxc_container_new(my_args.name, my_args.lxcpath[0]); c = lxc_container_new(my_args.name, my_args.lxcpath[0]);
if (!c) if (!c)
return 1; exit(EXIT_FAILURE);
if (!c->may_control(c)) { if (!c->may_control(c)) {
fprintf(stderr, "Insufficent privileges to control %s\n", c->name); fprintf(stderr, "Insufficent privileges to control %s\n", c->name);
lxc_container_put(c); lxc_container_put(c);
return 1; exit(EXIT_FAILURE);
} }
if (my_args.rcfile) { if (my_args.rcfile) {
@ -110,19 +110,19 @@ int main(int argc, char *argv[])
if (!c->load_config(c, my_args.rcfile)) { if (!c->load_config(c, my_args.rcfile)) {
fprintf(stderr, "Failed to load rcfile\n"); fprintf(stderr, "Failed to load rcfile\n");
lxc_container_put(c); lxc_container_put(c);
return 1; exit(EXIT_FAILURE);
} }
c->configfile = strdup(my_args.rcfile); c->configfile = strdup(my_args.rcfile);
if (!c->configfile) { if (!c->configfile) {
fprintf(stderr, "Out of memory setting new config filename\n"); fprintf(stderr, "Out of memory setting new config filename\n");
lxc_container_put(c); lxc_container_put(c);
return 1; exit(EXIT_FAILURE);
} }
} }
if (!c->wait(c, my_args.states, my_args.timeout)) { if (!c->wait(c, my_args.states, my_args.timeout)) {
lxc_container_put(c); lxc_container_put(c);
return 1; exit(EXIT_FAILURE);
} }
return 0; exit(EXIT_SUCCESS);
} }