aboutsummaryrefslogtreecommitdiff
path: root/libbb/getopt32.c
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2007-03-15 13:28:46 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2007-03-15 13:28:46 +0000
commit24af7201e98a9692e1dfa9976c1a6ba97013ca23 (patch)
treec81c3ba07136f42fe81835e4720c180dcc0f2583 /libbb/getopt32.c
parent972288e62fa0798f59caf209ab58c911d289a8b2 (diff)
downloadbusybox-w32-24af7201e98a9692e1dfa9976c1a6ba97013ca23.tar.gz
busybox-w32-24af7201e98a9692e1dfa9976c1a6ba97013ca23.tar.bz2
busybox-w32-24af7201e98a9692e1dfa9976c1a6ba97013ca23.zip
fix TODO: getopt32 should reset optind to 1 itself
Diffstat (limited to 'libbb/getopt32.c')
-rw-r--r--libbb/getopt32.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/libbb/getopt32.c b/libbb/getopt32.c
index 9f5fd60bd..6cdbfd35d 100644
--- a/libbb/getopt32.c
+++ b/libbb/getopt32.c
@@ -454,6 +454,10 @@ getopt32(int argc, char **argv, const char *applet_opts, ...)
454 spec_flgs |= FREE_FIRST_ARGV_IS_OPT; 454 spec_flgs |= FREE_FIRST_ARGV_IS_OPT;
455 } 455 }
456 } 456 }
457
458 /* In case getopt32 was already called, reinit some state */
459 optind = 1;
460
457 /* Note: just "getopt() <= 0" will not work good for 461 /* Note: just "getopt() <= 0" will not work good for
458 * "fake" short options, like this one: 462 * "fake" short options, like this one:
459 * wget $'-\203' "Test: test" http://kernel.org/ 463 * wget $'-\203' "Test: test" http://kernel.org/
@@ -463,9 +467,9 @@ getopt32(int argc, char **argv, const char *applet_opts, ...)
463 applet_long_options, NULL)) != -1) { 467 applet_long_options, NULL)) != -1) {
464#else 468#else
465 while ((c = getopt(argc, argv, applet_opts)) != -1) { 469 while ((c = getopt(argc, argv, applet_opts)) != -1) {
466#endif /* ENABLE_GETOPT_LONG */ 470#endif
467 c &= 0xff; /* fight libc's sign extends */ 471 c &= 0xff; /* fight libc's sign extends */
468loop_arg_is_opt: 472 loop_arg_is_opt:
469 for (on_off = complementary; on_off->opt != c; on_off++) { 473 for (on_off = complementary; on_off->opt != c; on_off++) {
470 /* c==0 if long opt have non NULL flag */ 474 /* c==0 if long opt have non NULL flag */
471 if (on_off->opt == 0 && c != 0) 475 if (on_off->opt == 0 && c != 0)