diff options
author | Denys Vlasenko | 2017-08-04 16:23:42 +0200 |
---|---|---|
committer | Denys Vlasenko | 2017-08-04 16:33:23 +0200 |
commit | 727948e585cb133c32c8d42570e5524c58190307 (patch) | |
tree | f2beb48ded47f9d8ebef707516e7bbb00335b1a8 /libbb/getopt32.c | |
parent | 7f9d62d7f5b67b6b1cc7e0b94826ba2a6e193586 (diff) | |
download | busybox-727948e585cb133c32c8d42570e5524c58190307.zip busybox-727948e585cb133c32c8d42570e5524c58190307.tar.gz |
getopt32: factor out code to treat all args as options
Working towards making getopt32() xmalloc-free
function old new delta
make_all_argv_opts - 58 +58
top_main 914 912 -2
getopt32 1517 1458 -59
------------------------------------------------------------------------------
(add/remove: 2/0 grow/shrink: 0/2 up/down: 58/-61) Total: -3 bytes
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'libbb/getopt32.c')
-rw-r--r-- | libbb/getopt32.c | 31 |
1 files changed, 6 insertions, 25 deletions
diff --git a/libbb/getopt32.c b/libbb/getopt32.c index 80f4cc0..129840c 100644 --- a/libbb/getopt32.c +++ b/libbb/getopt32.c @@ -6,12 +6,13 @@ * * Licensed under GPLv2 or later, see file LICENSE in this source tree. */ - #if ENABLE_LONG_OPTS || ENABLE_FEATURE_GETOPT_LONG # include <getopt.h> #endif #include "libbb.h" +//kbuild:lib-y += getopt32.o + /* Documentation uint32_t @@ -170,21 +171,6 @@ const char *opt_complementary Special characters: - "-" A group consisting of just a dash forces all arguments - to be treated as options, even if they have no leading dashes. - Next char in this case can't be a digit (0-9), use ':' or end of line. - Example: - - opt_complementary = "-:w-x:x-w"; // "-w-x:x-w" would also work, - getopt32(argv, "wx"); // but is less readable - - This makes it possible to use options without a dash (./program w x) - as well as with a dash (./program -x). - - NB: getopt32() will leak a small amount of memory if you use - this option! Do not use it if there is a possibility of recursive - getopt32() calls. - "--" A double dash at the beginning of opt_complementary means the argv[1] string should always be treated as options, even if it isn't prefixed with a "-". This is useful for special syntax in applets @@ -373,8 +359,7 @@ getopt32(char **argv, const char *applet_opts, ...) int max_arg = -1; #define SHOW_USAGE_IF_ERROR 1 -#define ALL_ARGV_IS_OPTS 2 -#define FIRST_ARGV_IS_OPT 4 +#define FIRST_ARGV_IS_OPT 2 int spec_flgs = 0; @@ -486,8 +471,7 @@ getopt32(char **argv, const char *applet_opts, ...) if (c == '-') { spec_flgs |= FIRST_ARGV_IS_OPT; s++; - } else - spec_flgs |= ALL_ARGV_IS_OPTS; + } } else { min_arg = c - '0'; s++; @@ -551,9 +535,9 @@ getopt32(char **argv, const char *applet_opts, ...) opt_complementary = NULL; va_end(p); - if (spec_flgs & (FIRST_ARGV_IS_OPT | ALL_ARGV_IS_OPTS)) { + if (spec_flgs & FIRST_ARGV_IS_OPT) { pargv = argv + 1; - while (*pargv) { + if (*pargv) { if (pargv[0][0] != '-' && pargv[0][0] != '\0') { /* Can't use alloca: opts with params will * return pointers to stack! @@ -563,9 +547,6 @@ getopt32(char **argv, const char *applet_opts, ...) strcpy(pp + 1, *pargv); *pargv = pp; } - if (!(spec_flgs & ALL_ARGV_IS_OPTS)) - break; - pargv++; } } |