diff --git a/coccinelle/exit.cocci b/coccinelle/exit.cocci new file mode 100644 index 000000000..8b8160057 --- /dev/null +++ b/coccinelle/exit.cocci @@ -0,0 +1,16 @@ +@@ +@@ +- exit(0); ++ exit(EXIT_SUCCESS); +@@ +@@ +- _exit(0); ++ _exit(EXIT_SUCCESS); +@@ +@@ +- exit(1); ++ exit(EXIT_FAILURE); +@@ +@@ +- _exit(1); ++ _exit(EXIT_FAILURE); diff --git a/coccinelle/run-coccinelle.sh b/coccinelle/run-coccinelle.sh new file mode 100755 index 000000000..22ab66d3d --- /dev/null +++ b/coccinelle/run-coccinelle.sh @@ -0,0 +1,27 @@ +#!/bin/bash -e + +top="$(git rev-parse --show-toplevel)" +files="$(git ls-files ':/*.[ch]')" +args= + +case "$1" in + -i) + args="$args --in-place" + shift + ;; +esac + +if ! parallel -h >/dev/null; then + echo 'Please install GNU parallel (package "parallel")' + exit 1 +fi + +for SCRIPT in ${@-$top/coccinelle/*.cocci} ; do + echo "--x-- Processing $SCRIPT --x--" + TMPFILE=`mktemp` + echo "+ spatch --sp-file $SCRIPT $args ..." + parallel --halt now,fail=1 --keep-order --noswap --max-args=20 \ + spatch --sp-file $SCRIPT $args ::: $files \ + 2>"$TMPFILE" || cat "$TMPFILE" + echo -e "--x-- Processed $SCRIPT --x--\n" +done diff --git a/coccinelle/while-true.cocci b/coccinelle/while-true.cocci new file mode 100644 index 000000000..c23fb11f2 --- /dev/null +++ b/coccinelle/while-true.cocci @@ -0,0 +1,12 @@ +@@ +statement s; +@@ +- while (true) ++ for (;;) +s +@@ +statement s; +@@ +- while (1) ++ for (;;) +s diff --git a/src/lxc/attach.c b/src/lxc/attach.c index df9dda02e..eb5ae7460 100644 --- a/src/lxc/attach.c +++ b/src/lxc/attach.c @@ -1521,7 +1521,7 @@ int lxc_attach(const char *name, const char *lxcpath, /* The rest is in the hands of the initial and the attached process. */ lxc_proc_put_context_info(init_ctx); - _exit(0); + _exit(EXIT_SUCCESS); } int lxc_attach_run_command(void *payload) diff --git a/src/lxc/cmd/lxc_init.c b/src/lxc/cmd/lxc_init.c index b3849545a..d9ba40b8d 100644 --- a/src/lxc/cmd/lxc_init.c +++ b/src/lxc/cmd/lxc_init.c @@ -459,13 +459,13 @@ __noreturn static void print_usage_exit(const struct option longopts[]) { fprintf(stderr, "Usage: lxc-init [-n|--name=NAME] [-h|--help] [--usage] [--version]\n\ [-q|--quiet] [-P|--lxcpath=LXCPATH]\n"); - exit(0); + exit(EXIT_SUCCESS); } __noreturn static void print_version_exit(void) { printf("%s\n", LXC_VERSION); - exit(0); + exit(EXIT_SUCCESS); } static void print_help(void) @@ -492,7 +492,7 @@ See the lxc-init man page for further information.\n\n"); static int arguments_parse(struct arguments *args, int argc, char *const argv[]) { - while (true) { + for (;;) { int c; int index = 0; diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c index 3a6696039..9875a58a3 100644 --- a/src/lxc/lxccontainer.c +++ b/src/lxc/lxccontainer.c @@ -3365,7 +3365,7 @@ static int copy_file(const char *old, const char *new) return -1; } - while (1) { + for (;;) { len = lxc_read_nointr(in, buf, 8096); if (len < 0) { SYSERROR("Error reading old file %s", old); @@ -4100,7 +4100,7 @@ static int get_next_index(const char *lxcpath, char *cname) fname = must_realloc(NULL, strlen(lxcpath) + 20); - while (1) { + for (;;) { sprintf(fname, "%s/snap%d", lxcpath, i); ret = stat(fname, &sb); diff --git a/src/lxc/network.c b/src/lxc/network.c index 249d9d471..e05c56615 100644 --- a/src/lxc/network.c +++ b/src/lxc/network.c @@ -1974,7 +1974,7 @@ char *lxc_mkifname(char *template) } /* Generate random names until we find one that doesn't exist. */ - while (true) { + for (;;) { name[0] = '\0'; (void)strlcpy(name, template, IFNAMSIZ); diff --git a/src/lxc/pam/pam_cgfs.c b/src/lxc/pam/pam_cgfs.c index 1a377d7aa..2fb3f7378 100644 --- a/src/lxc/pam/pam_cgfs.c +++ b/src/lxc/pam/pam_cgfs.c @@ -259,7 +259,7 @@ static bool mkdir_parent(const char *root, char *path) return true; b = path + strlen(root) + 1; - while (true) { + for (;;) { while (*b && (*b == '/')) b++; if (!*b) @@ -878,7 +878,7 @@ static char *cgv1_get_current_cgroup(char *basecginfo, char *controller) p = basecginfo; - while (true) { + for (;;) { p = strchr(p, ':'); if (!p) return NULL; diff --git a/src/lxc/storage/btrfs.c b/src/lxc/storage/btrfs.c index bbfce61b9..06ec7e8c7 100644 --- a/src/lxc/storage/btrfs.c +++ b/src/lxc/storage/btrfs.c @@ -805,7 +805,7 @@ static int btrfs_recursive_destroy(const char *path) sk->max_transid = (u64)-1; sk->nr_items = 4096; - while(1) { + for (;;) { ret = ioctl(fd, BTRFS_IOC_TREE_SEARCH, &args); e = errno; if (ret < 0) { diff --git a/src/lxc/storage/nbd.c b/src/lxc/storage/nbd.c index 8b19d63ac..6c59bacf0 100644 --- a/src/lxc/storage/nbd.c +++ b/src/lxc/storage/nbd.c @@ -72,7 +72,7 @@ bool attach_nbd(char *src, struct lxc_conf *conf) if (p) *p = '\0'; - while (1) { + for (;;) { sprintf(path, "/dev/nbd%d", i); if (!file_exists(path)) @@ -208,13 +208,13 @@ static int do_attach_nbd(void *d) if (sigprocmask(SIG_BLOCK, &mask, NULL) == -1) { SYSERROR("Error blocking signals for nbd watcher"); - exit(1); + exit(EXIT_FAILURE); } sfd = signalfd(-1, &mask, 0); if (sfd == -1) { SYSERROR("Error opening signalfd for nbd task"); - exit(1); + exit(EXIT_FAILURE); } if (prctl(PR_SET_PDEATHSIG, prctl_arg(SIGHUP), prctl_arg(0), @@ -231,7 +231,7 @@ static int do_attach_nbd(void *d) if (fdsi.ssi_signo == SIGHUP) { /* container has exited */ nbd_detach(nbd); - exit(0); + exit(EXIT_SUCCESS); } else if (fdsi.ssi_signo == SIGCHLD) { int status; @@ -241,7 +241,7 @@ static int do_attach_nbd(void *d) if ((WIFEXITED(status) && WEXITSTATUS(status) != 0) || WIFSIGNALED(status)) { nbd_detach(nbd); - exit(1); + exit(EXIT_FAILURE); } } } @@ -255,7 +255,7 @@ static int do_attach_nbd(void *d) execlp("qemu-nbd", "qemu-nbd", "-c", nbd, path, (char *)NULL); SYSERROR("Error executing qemu-nbd"); - _exit(1); + _exit(EXIT_FAILURE); } static bool clone_attach_nbd(const char *nbd, const char *path) @@ -304,7 +304,7 @@ static void nbd_detach(const char *path) execlp("qemu-nbd", "qemu-nbd", "-d", path, (char *)NULL); SYSERROR("Error executing qemu-nbd"); - _exit(1); + _exit(EXIT_FAILURE); } /* diff --git a/src/lxc/string_utils.c b/src/lxc/string_utils.c index 184921c11..eb83f5505 100644 --- a/src/lxc/string_utils.c +++ b/src/lxc/string_utils.c @@ -69,7 +69,7 @@ char **lxc_va_arg_list_to_argv(va_list ap, size_t skip, int do_strdup) * constantly... */ va_copy(ap2, ap); - while (1) { + for (;;) { char *arg = va_arg(ap2, char *); if (!arg) break; @@ -82,7 +82,7 @@ char **lxc_va_arg_list_to_argv(va_list ap, size_t skip, int do_strdup) return NULL; count = skip; - while (1) { + for (;;) { char *arg = va_arg(ap, char *); if (!arg) break; diff --git a/src/lxc/tools/arguments.c b/src/lxc/tools/arguments.c index 99b346207..859a9fbc3 100644 --- a/src/lxc/tools/arguments.c +++ b/src/lxc/tools/arguments.c @@ -135,13 +135,13 @@ __noreturn static void print_usage_exit(const struct option longopts[], } fprintf(stderr, "\n"); - exit(0); + exit(EXIT_SUCCESS); } __noreturn static void print_version_exit() { printf("%s\n", lxc_get_version()); - exit(0); + exit(EXIT_SUCCESS); } __noreturn static void print_help_exit(const struct lxc_arguments *args, @@ -207,7 +207,7 @@ extern int lxc_arguments_parse(struct lxc_arguments *args, int argc, return ret; } - while (true) { + for (;;) { int c; int index = 0; diff --git a/src/lxc/tools/lxc_autostart.c b/src/lxc/tools/lxc_autostart.c index d6f3cb126..ccac42b1c 100644 --- a/src/lxc/tools/lxc_autostart.c +++ b/src/lxc/tools/lxc_autostart.c @@ -512,7 +512,7 @@ int main(int argc, char *argv[]) free(containers); if (failed == count) - exit(1); /* Total failure */ + exit(EXIT_FAILURE); /* Total failure */ else if (failed > 0) exit(2); /* Partial failure */ diff --git a/src/lxc/utils.c b/src/lxc/utils.c index 560e333ef..be81727c3 100644 --- a/src/lxc/utils.c +++ b/src/lxc/utils.c @@ -1101,7 +1101,7 @@ static int open_without_symlink(const char *target, const char *prefix_skip) goto out; } - while (1) { + for (;;) { int newfd, saved_errno; char *nextpath; diff --git a/src/tests/aa.c b/src/tests/aa.c index 7a83e8e17..69808b6f3 100644 --- a/src/tests/aa.c +++ b/src/tests/aa.c @@ -154,7 +154,7 @@ int main(int argc, char *argv[]) c = lxc_container_new(MYNAME, NULL); if (!c) { fprintf(stderr, "%s: %d: failed to load first container\n", __FILE__, __LINE__); - exit(1); + exit(EXIT_FAILURE); } if (c->is_defined(c)) { @@ -190,9 +190,9 @@ int main(int argc, char *argv[]) c->stop(c); try_to_remove(); - exit(0); + exit(EXIT_SUCCESS); err: try_to_remove(); - exit(1); + exit(EXIT_FAILURE); } diff --git a/src/tests/cgpath.c b/src/tests/cgpath.c index de999417c..f4e246943 100644 --- a/src/tests/cgpath.c +++ b/src/tests/cgpath.c @@ -184,7 +184,7 @@ int main() * pam_cgroup */ if (geteuid() != 0) { TSTERR("requires privilege"); - exit(0); + exit(EXIT_SUCCESS); } #if TEST_ALREADY_RUNNING_CT diff --git a/src/tests/list.c b/src/tests/list.c index 37f910e61..293835756 100644 --- a/src/tests/list.c +++ b/src/tests/list.c @@ -99,5 +99,5 @@ int main(int argc, char *argv[]) test_list_func(lxcpath, "Active:", list_active_containers); test_list_func(lxcpath, "All:", list_all_containers); - exit(0); + exit(EXIT_SUCCESS); } diff --git a/src/tests/locktests.c b/src/tests/locktests.c index cfec5f1ba..74cd48541 100644 --- a/src/tests/locktests.c +++ b/src/tests/locktests.c @@ -37,46 +37,46 @@ static void test_two_locks(void) char c; if (pipe(p) < 0) - exit(1); + exit(EXIT_FAILURE); if ((pid = fork()) < 0) - exit(1); + exit(EXIT_FAILURE); if (pid == 0) { if (read(p[0], &c, 1) < 0) { perror("read"); - exit(1); + exit(EXIT_FAILURE); } l = lxc_newlock("/tmp", "lxctest-sem"); if (!l) { fprintf(stderr, "%d: child: failed to create lock\n", __LINE__); - exit(1); + exit(EXIT_FAILURE); } if (lxclock(l, 0) < 0) { fprintf(stderr, "%d: child: failed to grab lock\n", __LINE__); - exit(1); + exit(EXIT_FAILURE); } fprintf(stderr, "%d: child: grabbed lock\n", __LINE__); - exit(0); + exit(EXIT_SUCCESS); } l = lxc_newlock("/tmp", "lxctest-sem"); if (!l) { fprintf(stderr, "%d: failed to create lock\n", __LINE__); - exit(1); + exit(EXIT_FAILURE); } if (lxclock(l, 0) < 0) { fprintf(stderr, "%d; failed to get lock\n", __LINE__); - exit(1); + exit(EXIT_FAILURE); } if (write(p[1], "a", 1) < 0) { perror("write"); - exit(1); + exit(EXIT_FAILURE); } sleep(3); @@ -87,13 +87,13 @@ static void test_two_locks(void) printf("%d exited normally with exit code %d\n", pid, WEXITSTATUS(status)); if (WEXITSTATUS(status) != 0) - exit(1); + exit(EXIT_FAILURE); } else printf("%d did not exit normally\n", pid); return; } else if (ret < 0) { perror("waitpid"); - exit(1); + exit(EXIT_FAILURE); } kill(pid, SIGKILL); @@ -112,26 +112,26 @@ int main(int argc, char *argv[]) lock = lxc_newlock(NULL, NULL); if (!lock) { fprintf(stderr, "%d: failed to get unnamed lock\n", __LINE__); - exit(1); + exit(EXIT_FAILURE); } ret = lxclock(lock, 0); if (ret) { fprintf(stderr, "%d: failed to take unnamed lock (%d)\n", __LINE__, ret); - exit(1); + exit(EXIT_FAILURE); } ret = lxcunlock(lock); if (ret) { fprintf(stderr, "%d: failed to put unnamed lock (%d)\n", __LINE__, ret); - exit(1); + exit(EXIT_FAILURE); } lxc_putlock(lock); lock = lxc_newlock("/var/lib/lxc", mycontainername); if (!lock) { fprintf(stderr, "%d: failed to get lock\n", __LINE__); - exit(1); + exit(EXIT_FAILURE); } struct stat sb; @@ -141,7 +141,7 @@ int main(int argc, char *argv[]) if (ret != 0) { fprintf(stderr, "%d: filename %s not created\n", __LINE__, pathname); - exit(1); + exit(EXIT_FAILURE); } lxc_putlock(lock); diff --git a/src/tests/may_control.c b/src/tests/may_control.c index 2930deb2a..88437140d 100644 --- a/src/tests/may_control.c +++ b/src/tests/may_control.c @@ -24,7 +24,7 @@ static void usage(const char *me) { printf("Usage: %s name [lxcpath]\n", me); - exit(0); + exit(EXIT_SUCCESS); } int main(int argc, char *argv[]) diff --git a/src/tests/snapshot.c b/src/tests/snapshot.c index 1b7d7ab44..e62230bc2 100644 --- a/src/tests/snapshot.c +++ b/src/tests/snapshot.c @@ -75,7 +75,7 @@ int main(int argc, char *argv[]) c = lxc_container_new(MYNAME, NULL); if (!c) { fprintf(stderr, "%s: %d: failed to load first container\n", __FILE__, __LINE__); - exit(1); + exit(EXIT_FAILURE); } if (c->is_defined(c)) { @@ -188,12 +188,12 @@ good: try_to_remove(); printf("All tests passed\n"); - exit(0); + exit(EXIT_SUCCESS); err: lxc_container_put(c); try_to_remove(); fprintf(stderr, "Exiting on error\n"); - exit(1); + exit(EXIT_FAILURE); } diff --git a/src/tests/startone.c b/src/tests/startone.c index a69c3c9ea..de9af07f8 100644 --- a/src/tests/startone.c +++ b/src/tests/startone.c @@ -170,13 +170,13 @@ int main(int argc, char *argv[]) if (!lxc_container_get(c)) { fprintf(stderr, "%d: failed to get extra ref to container\n", __LINE__); - exit(1); + exit(EXIT_FAILURE); } c->want_daemonize(c, true); if (!c->startl(c, 0, NULL)) { fprintf(stderr, "%d: %s failed to start\n", __LINE__, c->name); - exit(1); + exit(EXIT_FAILURE); } sleep(3);