[lxc-devel] [PATCH RFC] lxc_*.c: don't exit with -1
Serge Hallyn
serge.hallyn at ubuntu.com
Mon Apr 7 16:56:20 UTC 2014
In this patch I tried to stick with each file's coding style, however I
think we should probably change that. Every main() should always not
return and only exit; they should always return EXIT_SUCCESS or EXIT_FAILURE
with the only exceptions being cases where we are returning a child's
exit status (lxc_execute, lxc_attach, lxc_init).
Signed-off-by: Serge Hallyn <serge.hallyn at ubuntu.com>
---
doc/lxc-stop.sgml.in | 35 +++++++++++++++++++++++++++++++++++
src/lxc/lxc_attach.c | 12 ++++++------
src/lxc/lxc_cgroup.c | 14 +++++++-------
src/lxc/lxc_clone.c | 2 +-
src/lxc/lxc_config.c | 2 +-
src/lxc/lxc_console.c | 2 +-
src/lxc/lxc_destroy.c | 4 ++--
src/lxc/lxc_execute.c | 20 ++++++++++++--------
src/lxc/lxc_freeze.c | 4 ++--
src/lxc/lxc_init.c | 4 +++-
src/lxc/lxc_monitor.c | 14 +++++++-------
src/lxc/lxc_monitord.c | 6 ++++--
src/lxc/lxc_snapshot.c | 8 +++++---
src/lxc/lxc_stop.c | 2 ++
src/lxc/lxc_unfreeze.c | 4 ++--
src/lxc/lxc_unshare.c | 6 +++---
src/lxc/lxc_usernsexec.c | 2 +-
src/lxc/lxc_wait.c | 10 +++++-----
18 files changed, 99 insertions(+), 52 deletions(-)
diff --git a/doc/lxc-stop.sgml.in b/doc/lxc-stop.sgml.in
index dc002c5..bc5e6a8 100644
--- a/doc/lxc-stop.sgml.in
+++ b/doc/lxc-stop.sgml.in
@@ -163,6 +163,41 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
</refsect1>
<refsect1>
+ <title>Exit value</title>
+
+ <variablelist>
+
+ <varlistentry>
+ <term>0</term>
+ <listitem>
+ <para>
+ The container was successfully stopped.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>1</term>
+ <listitem>
+ <para>
+ An error occurred while stopping the container.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>2</term>
+ <listitem>
+ <para>
+ The specified container exists but was not running.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ </variablelist>
+
+ </refsect1>
+ <refsect1>
<title>Diagnostic</title>
<variablelist>
diff --git a/src/lxc/lxc_attach.c b/src/lxc/lxc_attach.c
index 3fbcb82..3757ff9 100644
--- a/src/lxc/lxc_attach.c
+++ b/src/lxc/lxc_attach.c
@@ -195,11 +195,11 @@ int main(int argc, char *argv[])
ret = lxc_caps_init();
if (ret)
- return ret;
+ return 1;
ret = lxc_arguments_parse(&my_args, argc, argv);
if (ret)
- return ret;
+ return 1;
if (!my_args.log_file)
my_args.log_file = "none";
@@ -207,7 +207,7 @@ int main(int argc, char *argv[])
ret = lxc_log_init(my_args.name, my_args.log_file, my_args.log_priority,
my_args.progname, my_args.quiet, my_args.lxcpath[0]);
if (ret)
- return ret;
+ return 1;
lxc_log_options_no_override();
if (remount_sys_proc)
@@ -229,14 +229,14 @@ int main(int argc, char *argv[])
}
if (ret < 0)
- return -1;
+ return 1;
ret = lxc_wait_for_pid_status(pid);
if (ret < 0)
- return -1;
+ return 1;
if (WIFEXITED(ret))
return WEXITSTATUS(ret);
- return -1;
+ return 1;
}
diff --git a/src/lxc/lxc_cgroup.c b/src/lxc/lxc_cgroup.c
index a3cd2b7..f150c43 100644
--- a/src/lxc/lxc_cgroup.c
+++ b/src/lxc/lxc_cgroup.c
@@ -68,32 +68,32 @@ int main(int argc, char *argv[])
struct lxc_container *c;
if (lxc_arguments_parse(&my_args, argc, argv))
- return -1;
+ return 1;
if (!my_args.log_file)
my_args.log_file = "none";
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]))
- return -1;
+ return 1;
lxc_log_options_no_override();
state_object = my_args.argv[0];
c = lxc_container_new(my_args.name, my_args.lxcpath[0]);
if (!c)
- return -1;
+ return 1;
if (!c->may_control(c)) {
ERROR("Insufficent privileges to control %s:%s", my_args.lxcpath[0], my_args.name);
lxc_container_put(c);
- return -1;
+ return 1;
}
if (!c->is_running(c)) {
ERROR("'%s:%s' is not running", my_args.lxcpath[0], my_args.name);
lxc_container_put(c);
- return -1;
+ return 1;
}
if ((my_args.argc) > 1) {
@@ -102,7 +102,7 @@ int main(int argc, char *argv[])
ERROR("failed to assign '%s' value to '%s' for '%s'",
value, state_object, my_args.name);
lxc_container_put(c);
- return -1;
+ return 1;
}
} else {
int len = 4096;
@@ -112,7 +112,7 @@ int main(int argc, char *argv[])
ERROR("failed to retrieve value of '%s' for '%s:%s'",
state_object, my_args.lxcpath[0], my_args.name);
lxc_container_put(c);
- return -1;
+ return 1;
}
printf("%*s", ret, buffer);
}
diff --git a/src/lxc/lxc_clone.c b/src/lxc/lxc_clone.c
index 05579b8..df1b5ef 100644
--- a/src/lxc/lxc_clone.c
+++ b/src/lxc/lxc_clone.c
@@ -176,7 +176,7 @@ int main(int argc, char *argv[])
if (!c1->may_control(c1)) {
fprintf(stderr, "Insufficent privileges to control %s\n", orig);
lxc_container_put(c1);
- return -1;
+ return 1;
}
if (!c1->is_defined(c1)) {
diff --git a/src/lxc/lxc_config.c b/src/lxc/lxc_config.c
index dc8827c..0658beb 100644
--- a/src/lxc/lxc_config.c
+++ b/src/lxc/lxc_config.c
@@ -70,5 +70,5 @@ int main(int argc, char *argv[])
}
}
printf("Unknown configuration item: %s\n", argv[1]);
- exit(-1);
+ exit(1);
}
diff --git a/src/lxc/lxc_console.c b/src/lxc/lxc_console.c
index 0fd08e8..b22322b 100644
--- a/src/lxc/lxc_console.c
+++ b/src/lxc/lxc_console.c
@@ -115,7 +115,7 @@ int main(int argc, char *argv[])
if (!c->may_control(c)) {
fprintf(stderr, "Insufficent privileges to control %s\n", my_args.name);
lxc_container_put(c);
- return -1;
+ exit(EXIT_FAILURE);
}
if (!c->is_running(c)) {
diff --git a/src/lxc/lxc_destroy.c b/src/lxc/lxc_destroy.c
index d8bca34..955fc23 100644
--- a/src/lxc/lxc_destroy.c
+++ b/src/lxc/lxc_destroy.c
@@ -83,7 +83,7 @@ int main(int argc, char *argv[])
if (!c->may_control(c)) {
fprintf(stderr, "Insufficent privileges to control %s\n", my_args.name);
lxc_container_put(c);
- return -1;
+ exit(1);
}
if (!c->is_defined(c)) {
@@ -108,5 +108,5 @@ int main(int argc, char *argv[])
}
lxc_container_put(c);
- return 0;
+ exit(0);
}
diff --git a/src/lxc/lxc_execute.c b/src/lxc/lxc_execute.c
index 2ba4aeb..df25df3 100644
--- a/src/lxc/lxc_execute.c
+++ b/src/lxc/lxc_execute.c
@@ -91,18 +91,19 @@ int main(int argc, char *argv[])
{
char *rcfile;
struct lxc_conf *conf;
+ int ret;
lxc_list_init(&defines);
if (lxc_caps_init())
- return -1;
+ return 1;
if (lxc_arguments_parse(&my_args, argc, argv))
- return -1;
+ return 1;
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]))
- return -1;
+ return 1;
lxc_log_options_no_override();
/* rcfile is specified in the cli option */
@@ -114,7 +115,7 @@ int main(int argc, char *argv[])
rc = asprintf(&rcfile, "%s/%s/config", my_args.lxcpath[0], my_args.name);
if (rc == -1) {
SYSERROR("failed to allocate memory");
- return -1;
+ return 1;
}
/* container configuration does not exist */
@@ -127,16 +128,19 @@ int main(int argc, char *argv[])
conf = lxc_conf_init();
if (!conf) {
ERROR("failed to initialize configuration");
- return -1;
+ return 1;
}
if (rcfile && lxc_config_read(rcfile, conf)) {
ERROR("failed to read configuration file");
- return -1;
+ return 1;
}
if (lxc_config_define_load(&defines, conf))
- return -1;
+ return 1;
- return lxc_execute(my_args.name, my_args.argv, my_args.quiet, conf, my_args.lxcpath[0]);
+ ret = lxc_execute(my_args.name, my_args.argv, my_args.quiet, conf, my_args.lxcpath[0]);
+ if (ret < 0)
+ return 1;
+ return ret;
}
diff --git a/src/lxc/lxc_freeze.c b/src/lxc/lxc_freeze.c
index fa64963..0744c82 100644
--- a/src/lxc/lxc_freeze.c
+++ b/src/lxc/lxc_freeze.c
@@ -77,7 +77,7 @@ int main(int argc, char *argv[])
if (!c->may_control(c)) {
ERROR("Insufficent privileges to control %s:%s", my_args.lxcpath[0], my_args.name);
lxc_container_put(c);
- return -1;
+ exit(1);
}
if (!c->freeze(c)) {
@@ -88,5 +88,5 @@ int main(int argc, char *argv[])
lxc_container_put(c);
- return 0;
+ exit(0);
}
diff --git a/src/lxc/lxc_init.c b/src/lxc/lxc_init.c
index 91ed08d..b5596a0 100644
--- a/src/lxc/lxc_init.c
+++ b/src/lxc/lxc_init.c
@@ -260,5 +260,7 @@ int main(int argc, char *argv[])
}
}
out:
- return err;
+ if (err < 0)
+ exit(EXIT_FAILURE);
+ exit(err);
}
diff --git a/src/lxc/lxc_monitor.c b/src/lxc/lxc_monitor.c
index 7e2299a..85993fc 100644
--- a/src/lxc/lxc_monitor.c
+++ b/src/lxc/lxc_monitor.c
@@ -78,14 +78,14 @@ int main(int argc, char *argv[])
int len, rc, i, nfds = -1;
if (lxc_arguments_parse(&my_args, argc, argv))
- return -1;
+ return 1;
if (!my_args.log_file)
my_args.log_file = "none";
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]))
- return -1;
+ return 1;
lxc_log_options_no_override();
if (quit_monitord) {
@@ -114,19 +114,19 @@ int main(int argc, char *argv[])
regexp = malloc(len + 3);
if (!regexp) {
ERROR("failed to allocate memory");
- return -1;
+ return 1;
}
rc = snprintf(regexp, len, "^%s$", my_args.name);
if (rc < 0 || rc >= len) {
ERROR("Name too long");
free(regexp);
- return -1;
+ return 1;
}
if (regcomp(&preg, regexp, REG_NOSUB|REG_EXTENDED)) {
ERROR("failed to compile the regex '%s'", my_args.name);
free(regexp);
- return -1;
+ return 1;
}
free(regexp);
@@ -144,7 +144,7 @@ int main(int argc, char *argv[])
fd = lxc_monitor_open(my_args.lxcpath[i]);
if (fd < 0) {
regfree(&preg);
- return -1;
+ return 1;
}
FD_SET(fd, &rfds);
if (fd > nfds)
@@ -160,7 +160,7 @@ int main(int argc, char *argv[])
if (lxc_monitor_read_fdset(&rfds, nfds, &msg, -1) < 0) {
regfree(&preg);
- return -1;
+ return 1;
}
msg.name[sizeof(msg.name)-1] = '\0';
diff --git a/src/lxc/lxc_monitord.c b/src/lxc/lxc_monitord.c
index 6328bf8..c317cbe 100644
--- a/src/lxc/lxc_monitord.c
+++ b/src/lxc/lxc_monitord.c
@@ -378,7 +378,7 @@ int main(int argc, char *argv[])
sigdelset(&mask, SIGTERM) ||
sigprocmask(SIG_BLOCK, &mask, NULL)) {
SYSERROR("failed to set signal mask");
- return -1;
+ return 1;
}
signal(SIGILL, lxc_monitord_sig_handler);
@@ -428,5 +428,7 @@ int main(int argc, char *argv[])
ret = EXIT_SUCCESS;
NOTICE("monitor exiting");
out:
- return ret;
+ if (ret == 0)
+ return 0;
+ return 1;
}
diff --git a/src/lxc/lxc_snapshot.c b/src/lxc/lxc_snapshot.c
index eba9c30..1f8fdaf 100644
--- a/src/lxc/lxc_snapshot.c
+++ b/src/lxc/lxc_snapshot.c
@@ -179,7 +179,7 @@ int main(int argc, char *argv[])
if (my_args.argc > 1) {
ERROR("Too many arguments");
- return -1;
+ exit(1);
}
if (my_args.argc == 1)
newname = my_args.argv[0];
@@ -205,7 +205,7 @@ int main(int argc, char *argv[])
if (!c->may_control(c)) {
fprintf(stderr, "Insufficent privileges to control %s\n", my_args.name);
lxc_container_put(c);
- return -1;
+ exit(1);
}
switch(action) {
@@ -225,5 +225,7 @@ int main(int argc, char *argv[])
lxc_container_put(c);
- exit(ret);
+ if (ret == 0)
+ exit(EXIT_SUCCESS);
+ exit(EXIT_FAILURE);
}
diff --git a/src/lxc/lxc_stop.c b/src/lxc/lxc_stop.c
index 78a1da2..cb2fee0 100644
--- a/src/lxc/lxc_stop.c
+++ b/src/lxc/lxc_stop.c
@@ -236,5 +236,7 @@ int main(int argc, char *argv[])
out:
lxc_container_put(c);
+ if (ret < 0)
+ return 1;
return ret;
}
diff --git a/src/lxc/lxc_unfreeze.c b/src/lxc/lxc_unfreeze.c
index 7371980..6a40ed7 100644
--- a/src/lxc/lxc_unfreeze.c
+++ b/src/lxc/lxc_unfreeze.c
@@ -75,7 +75,7 @@ int main(int argc, char *argv[])
if (!c->may_control(c)) {
ERROR("Insufficent privileges to control %s:%s", my_args.lxcpath[0], my_args.name);
lxc_container_put(c);
- return -1;
+ exit(1);
}
if (!c->unfreeze(c)) {
@@ -86,5 +86,5 @@ int main(int argc, char *argv[])
lxc_container_put(c);
- return 0;
+ exit(0);
}
diff --git a/src/lxc/lxc_unshare.c b/src/lxc/lxc_unshare.c
index a591d0a..fc6f9db 100644
--- a/src/lxc/lxc_unshare.c
+++ b/src/lxc/lxc_unshare.c
@@ -211,7 +211,7 @@ int main(int argc, char *argv[])
ret = lxc_caps_init();
if (ret)
- return ret;
+ return 1;
ret = lxc_fill_namespace_flags(namespaces, &flags);
if (ret)
@@ -235,7 +235,7 @@ int main(int argc, char *argv[])
pid = lxc_clone(do_start, &start_arg, flags);
if (pid < 0) {
ERROR("failed to clone");
- return -1;
+ return 1;
}
if (my_iflist) {
@@ -250,7 +250,7 @@ int main(int argc, char *argv[])
if (waitpid(pid, &status, 0) < 0) {
ERROR("failed to wait for '%d'", pid);
- return -1;
+ return 1;
}
return lxc_error_set_and_log(pid, status);
diff --git a/src/lxc/lxc_usernsexec.c b/src/lxc/lxc_usernsexec.c
index f5b7fe0..732a74a 100644
--- a/src/lxc/lxc_usernsexec.c
+++ b/src/lxc/lxc_usernsexec.c
@@ -364,7 +364,7 @@ int main(int argc, char *argv[])
if ((ret = waitpid(pid, &status, __WALL)) < 0) {
printf("waitpid() returns %d, errno %d\n", ret, errno);
- exit(ret);
+ exit(1);
}
exit(WEXITSTATUS(status));
diff --git a/src/lxc/lxc_wait.c b/src/lxc/lxc_wait.c
index e1010e2..897d0ea 100644
--- a/src/lxc/lxc_wait.c
+++ b/src/lxc/lxc_wait.c
@@ -84,29 +84,29 @@ int main(int argc, char *argv[])
struct lxc_container *c;
if (lxc_arguments_parse(&my_args, argc, argv))
- return -1;
+ return 1;
if (!my_args.log_file)
my_args.log_file = "none";
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]))
- return -1;
+ return 1;
lxc_log_options_no_override();
c = lxc_container_new(my_args.name, my_args.lxcpath[0]);
if (!c)
- return -1;
+ return 1;
if (!c->may_control(c)) {
fprintf(stderr, "Insufficent privileges to control %s\n", c->name);
lxc_container_put(c);
- return -1;
+ return 1;
}
if (!c->wait(c, my_args.states, my_args.timeout)) {
lxc_container_put(c);
- return -1;
+ return 1;
}
return 0;
}
--
1.9.1
More information about the lxc-devel
mailing list