aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2017-08-05 01:38:55 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2017-08-05 01:38:55 +0200
commit754e9f96defd7be48dfdc9ffe820c3fb7f35ff9e (patch)
tree07fed0afeec85d5aa19837faa30594f837bf70e1
parent9f59849daab488b5a46926a2979e8b957021e844 (diff)
downloadbusybox-w32-754e9f96defd7be48dfdc9ffe820c3fb7f35ff9e.tar.gz
busybox-w32-754e9f96defd7be48dfdc9ffe820c3fb7f35ff9e.tar.bz2
busybox-w32-754e9f96defd7be48dfdc9ffe820c3fb7f35ff9e.zip
svc: fix a case where with more than option, getopt() state is not reset
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--runit/sv.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/runit/sv.c b/runit/sv.c
index 3dd02550a..3267c7e4c 100644
--- a/runit/sv.c
+++ b/runit/sv.c
@@ -718,15 +718,16 @@ int svc_main(int argc UNUSED_PARAM, char **argv)
718 argv[1] = command; 718 argv[1] = command;
719 command[1] = '\0'; 719 command[1] = '\0';
720 720
721 /* getopt32() was already called:
722 * reset the libc getopt() function, which keeps internal state.
723 */
724 GETOPT_RESET();
725
726 do { 721 do {
727 if (opts & 1) { 722 if (opts & 1) {
728 int r; 723 int r;
724
729 command[0] = *optstring; 725 command[0] = *optstring;
726
727 /* getopt() was already called by getopt32():
728 * reset the libc getopt() function's internal state.
729 */
730 GETOPT_RESET();
730 r = sv(argv); 731 r = sv(argv);
731 if (r) 732 if (r)
732 return 1; 733 return 1;