Applied, thanks
On Sun, Sep 12, 2021 at 1:26 PM Ron Yorston <[email protected]> wrote: > > function old new delta > .rodata 99277 99290 +13 > normalize 177 142 -35 > getopt_main 675 622 -53 > ------------------------------------------------------------------------------ > (add/remove: 0/0 grow/shrink: 1/2 up/down: 13/-88) Total: -75 bytes > > Signed-off-by: Ron Yorston <[email protected]> > --- > util-linux/getopt.c | 45 +++++++++++++++++---------------------------- > 1 file changed, 17 insertions(+), 28 deletions(-) > > diff --git a/util-linux/getopt.c b/util-linux/getopt.c > index 1fa402429..c6d5dfc76 100644 > --- a/util-linux/getopt.c > +++ b/util-linux/getopt.c > @@ -156,46 +156,29 @@ enum { > static const char *normalize(const char *arg) > { > char *bufptr; > -#if ENABLE_FEATURE_CLEAN_UP > - static char *BUFFER = NULL; > - free(BUFFER); > -#else > char *BUFFER; > -#endif > > - if (!quote) { /* Just copy arg */ > - BUFFER = xstrdup(arg); > - return BUFFER; > + if (!quote) { /* Just return arg */ > + return arg; > } > > /* Each character in arg may take up to four characters in the result: > For a quote we need a closing quote, a backslash, a quote and an > opening quote! We need also the global opening and closing quote, > and one extra character for '\0'. */ > - BUFFER = xmalloc(strlen(arg)*4 + 3); > + BUFFER = auto_string(xmalloc(strlen(arg)*4 + 3)); > > bufptr = BUFFER; > *bufptr ++= '\''; > > while (*arg) { > - if (*arg == '\'') { > - /* Quote: replace it with: '\'' */ > - *bufptr ++= '\''; > - *bufptr ++= '\\'; > - *bufptr ++= '\''; > - *bufptr ++= '\''; > - } else if (shell_TCSH && *arg == '!') { > - /* Exclamation mark: replace it with: \! */ > - *bufptr ++= '\''; > - *bufptr ++= '\\'; > - *bufptr ++= '!'; > - *bufptr ++= '\''; > - } else if (shell_TCSH && *arg == '\n') { > + if (shell_TCSH && *arg == '\n') { > /* Newline: replace it with: \n */ > *bufptr ++= '\\'; > *bufptr ++= 'n'; > - } else if (shell_TCSH && isspace(*arg)) { > - /* Non-newline whitespace: replace it with \<ws> */ > + } else if ((shell_TCSH && (*arg == '!' || isspace(*arg))) || > + *arg == '\'') { > + /* Quote exclamation marks, non-NL whitespace and > quotes */ > *bufptr ++= '\''; > *bufptr ++= '\\'; > *bufptr ++= *arg; > @@ -327,12 +310,18 @@ static struct option *add_long_options(struct option > *long_options, char *option > > static void set_shell(const char *new_shell) > { > - if (strcmp(new_shell, "bash") == 0 || strcmp(new_shell, "sh") == 0) > - return; > - if (strcmp(new_shell, "tcsh") == 0 || strcmp(new_shell, "csh") == 0) > + switch (index_in_strings("bash\0sh\0tcsh\0csh\0", new_shell)) { > + case 0: > + case 1: > + break; > + case 2: > + case 3: > option_mask32 |= SHELL_IS_TCSH; > - else > + break; > + default: > bb_error_msg("unknown shell '%s', assuming bash", new_shell); > + break; > + } > } > > > -- > 2.31.1 > > _______________________________________________ > busybox mailing list > [email protected] > http://lists.busybox.net/mailman/listinfo/busybox _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
