diff options
author | Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi> | 2017-04-12 00:58:46 +0300 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2017-04-12 20:11:34 +0200 |
commit | 835ad3a984c5590ae4f6c94f2f0781ea049d1ae8 (patch) | |
tree | cb86c5441c258f66358faa93ef899e09a7788de8 /libbb | |
parent | c5496d3585bcab3c39f9b10f638ba0c94f5cda3f (diff) | |
download | busybox-w32-835ad3a984c5590ae4f6c94f2f0781ea049d1ae8.tar.gz busybox-w32-835ad3a984c5590ae4f6c94f2f0781ea049d1ae8.tar.bz2 busybox-w32-835ad3a984c5590ae4f6c94f2f0781ea049d1ae8.zip |
libbb: GETOPT_RESET macro
Signed-off-by: Kaarle Ritvanen <kaarle.ritvanen@datakunkku.fi>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'libbb')
-rw-r--r-- | libbb/getopt32.c | 8 | ||||
-rw-r--r-- | libbb/vfork_daemon_rexec.c | 28 |
2 files changed, 3 insertions, 33 deletions
diff --git a/libbb/getopt32.c b/libbb/getopt32.c index 497fc016f..3104826ef 100644 --- a/libbb/getopt32.c +++ b/libbb/getopt32.c | |||
@@ -576,13 +576,7 @@ getopt32(char **argv, const char *applet_opts, ...) | |||
576 | * run_nofork_applet() does this, but we might end up here | 576 | * run_nofork_applet() does this, but we might end up here |
577 | * also via gunzip_main() -> gzip_main(). Play safe. | 577 | * also via gunzip_main() -> gzip_main(). Play safe. |
578 | */ | 578 | */ |
579 | #ifdef __GLIBC__ | 579 | GETOPT_RESET(); |
580 | optind = 0; | ||
581 | #else /* BSD style */ | ||
582 | optind = 1; | ||
583 | /* optreset = 1; */ | ||
584 | #endif | ||
585 | /* optarg = NULL; opterr = 0; optopt = 0; - do we need this?? */ | ||
586 | 580 | ||
587 | /* Note: just "getopt() <= 0" will not work well for | 581 | /* Note: just "getopt() <= 0" will not work well for |
588 | * "fake" short options, like this one: | 582 | * "fake" short options, like this one: |
diff --git a/libbb/vfork_daemon_rexec.c b/libbb/vfork_daemon_rexec.c index 2e7dc2d9b..fd481bf6e 100644 --- a/libbb/vfork_daemon_rexec.c +++ b/libbb/vfork_daemon_rexec.c | |||
@@ -121,28 +121,8 @@ int FAST_FUNC run_nofork_applet(int applet_no, char **argv) | |||
121 | 121 | ||
122 | /* In case getopt() or getopt32() was already called: | 122 | /* In case getopt() or getopt32() was already called: |
123 | * reset the libc getopt() function, which keeps internal state. | 123 | * reset the libc getopt() function, which keeps internal state. |
124 | * | ||
125 | * BSD-derived getopt() functions require that optind be set to 1 in | ||
126 | * order to reset getopt() state. This used to be generally accepted | ||
127 | * way of resetting getopt(). However, glibc's getopt() | ||
128 | * has additional getopt() state beyond optind, and requires that | ||
129 | * optind be set to zero to reset its state. So the unfortunate state of | ||
130 | * affairs is that BSD-derived versions of getopt() misbehave if | ||
131 | * optind is set to 0 in order to reset getopt(), and glibc's getopt() | ||
132 | * will core dump if optind is set 1 in order to reset getopt(). | ||
133 | * | ||
134 | * More modern versions of BSD require that optreset be set to 1 in | ||
135 | * order to reset getopt(). Sigh. Standards, anyone? | ||
136 | */ | 124 | */ |
137 | #ifdef __GLIBC__ | 125 | GETOPT_RESET(); |
138 | optind = 0; | ||
139 | #else /* BSD style */ | ||
140 | optind = 1; | ||
141 | /* optreset = 1; */ | ||
142 | #endif | ||
143 | /* optarg = NULL; opterr = 1; optopt = 63; - do we need this too? */ | ||
144 | /* (values above are what they initialized to in glibc and uclibc) */ | ||
145 | /* option_mask32 = 0; - not needed, no applet depends on it being 0 */ | ||
146 | 126 | ||
147 | argc = 1; | 127 | argc = 1; |
148 | while (argv[argc]) | 128 | while (argv[argc]) |
@@ -167,11 +147,7 @@ int FAST_FUNC run_nofork_applet(int applet_no, char **argv) | |||
167 | restore_nofork_data(&old); | 147 | restore_nofork_data(&old); |
168 | 148 | ||
169 | /* Other globals can be simply reset to defaults */ | 149 | /* Other globals can be simply reset to defaults */ |
170 | #ifdef __GLIBC__ | 150 | GETOPT_RESET(); |
171 | optind = 0; | ||
172 | #else /* BSD style */ | ||
173 | optind = 1; | ||
174 | #endif | ||
175 | 151 | ||
176 | return rc & 0xff; /* don't confuse people with "exitcodes" >255 */ | 152 | return rc & 0xff; /* don't confuse people with "exitcodes" >255 */ |
177 | } | 153 | } |