MEDIUM: init: support more command line arguments after pid list
Given that all command line arguments start with a '-' and that
no pid number can start with this character, there's no constraint
to make the pid list the last argument. Let's relax this rule.
diff --git a/src/haproxy.c b/src/haproxy.c
index c2768fc..90bbb95 100644
--- a/src/haproxy.c
+++ b/src/haproxy.c
@@ -445,7 +445,7 @@
" -dG disables getaddrinfo() usage\n"
#endif
" -dV disables SSL verify on servers side\n"
- " -sf/-st [pid ]* finishes/terminates old pids. Must be last arguments.\n"
+ " -sf/-st [pid ]* finishes/terminates old pids.\n"
"\n",
name, DEFAULT_MAXCONN, cfg_maxpconn);
exit(1);
@@ -688,17 +688,18 @@
oldpids_sig = SIGUSR1; /* finish then exit */
else
oldpids_sig = SIGTERM; /* terminate immediately */
- argv++; argc--;
- if (argc > 0) {
- oldpids = calloc(argc, sizeof(int));
- while (argc > 0) {
- oldpids[nb_oldpids] = atol(*argv);
- if (oldpids[nb_oldpids] <= 0)
- usage(progname);
- argc--; argv++;
- nb_oldpids++;
+ while (argc > 1 && argv[1][0] != '-') {
+ oldpids = realloc(oldpids, (nb_oldpids + 1) * sizeof(int));
+ if (!oldpids) {
+ Alert("Cannot allocate old pid : out of memory.\n");
+ exit(1);
}
+ argc--; argv++;
+ oldpids[nb_oldpids] = atol(*argv);
+ if (oldpids[nb_oldpids] <= 0)
+ usage(progname);
+ nb_oldpids++;
}
}
else { /* >=2 args */