sleep: fix "sleep -- ARGS"

function                                             old     new   delta
sleep_main                                           116     119      +3
printf_main                                          860     837     -23
single_argv                                           50      25     -25
------------------------------------------------------------------------------
(add/remove: 0/0 grow/shrink: 1/2 up/down: 3/-48)             Total: -45 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
master
Denys Vlasenko 2023-10-02 13:56:32 +02:00
parent 2cc9d436e8
commit 791b222dd5
5 changed files with 19 additions and 19 deletions

View File

@ -425,9 +425,9 @@ int printf_main(int argc UNUSED_PARAM, char **argv)
/* bash builtin errors out on "printf '-%s-\n' foo", /* bash builtin errors out on "printf '-%s-\n' foo",
* coreutils-6.9 works. Both work with "printf -- '-%s-\n' foo". * coreutils-6.9 works. Both work with "printf -- '-%s-\n' foo".
* We will mimic coreutils. */ * We will mimic coreutils. */
if (argv[1] && argv[1][0] == '-' && argv[1][1] == '-' && !argv[1][2]) argv = skip_dash_dash(argv);
argv++;
if (!argv[1]) { if (!argv[0]) {
if ((ENABLE_ASH_PRINTF || ENABLE_HUSH_PRINTF) if ((ENABLE_ASH_PRINTF || ENABLE_HUSH_PRINTF)
&& applet_name[0] != 'p' && applet_name[0] != 'p'
) { ) {
@ -437,8 +437,8 @@ int printf_main(int argc UNUSED_PARAM, char **argv)
bb_show_usage(); bb_show_usage();
} }
format = argv[1]; format = argv[0];
argv2 = argv + 2; argv2 = argv + 1;
conv_err = 0; conv_err = 0;
do { do {

View File

@ -71,8 +71,8 @@ int sleep_main(int argc UNUSED_PARAM, char **argv)
* + we can't use bb_show_usage * + we can't use bb_show_usage
* + applet_name can be the name of the shell * + applet_name can be the name of the shell
*/ */
++argv; argv = skip_dash_dash(argv);
if (!*argv) { if (!argv[0]) {
/* Without this, bare "sleep" in ash shows _ash_ --help */ /* Without this, bare "sleep" in ash shows _ash_ --help */
/* (ash can be the "sh" applet as well, so check 2nd char) */ /* (ash can be the "sh" applet as well, so check 2nd char) */
if (ENABLE_ASH_SLEEP && applet_name[1] != 'l') { if (ENABLE_ASH_SLEEP && applet_name[1] != 'l') {

View File

@ -1344,6 +1344,7 @@ int sanitize_env_if_suid(void) FAST_FUNC;
/* For top, ps. Some argv[i] are replaced by malloced "-opt" strings */ /* For top, ps. Some argv[i] are replaced by malloced "-opt" strings */
void make_all_argv_opts(char **argv) FAST_FUNC; void make_all_argv_opts(char **argv) FAST_FUNC;
char* single_argv(char **argv) FAST_FUNC; char* single_argv(char **argv) FAST_FUNC;
char **skip_dash_dash(char **argv) FAST_FUNC;
extern const char *const bb_argv_dash[]; /* { "-", NULL } */ extern const char *const bb_argv_dash[]; /* { "-", NULL } */
extern uint32_t option_mask32; extern uint32_t option_mask32;
uint32_t getopt32(char **argv, const char *applet_opts, ...) FAST_FUNC; uint32_t getopt32(char **argv, const char *applet_opts, ...) FAST_FUNC;

View File

@ -8,11 +8,18 @@
*/ */
#include "libbb.h" #include "libbb.h"
char** FAST_FUNC skip_dash_dash(char **argv)
{
argv++;
if (argv[0] && argv[0][0] == '-' && argv[0][1] == '-' && argv[0][2] == '\0')
argv++;
return argv;
}
char* FAST_FUNC single_argv(char **argv) char* FAST_FUNC single_argv(char **argv)
{ {
if (argv[1] && strcmp(argv[1], "--") == 0) argv = skip_dash_dash(argv);
argv++; if (!argv[0] || argv[1])
if (!argv[1] || argv[2])
bb_show_usage(); bb_show_usage();
return argv[1]; return argv[0];
} }

View File

@ -10883,14 +10883,6 @@ static int FAST_FUNC builtin_history(char **argv UNUSED_PARAM)
} }
#endif #endif
static char **skip_dash_dash(char **argv)
{
argv++;
if (argv[0] && argv[0][0] == '-' && argv[0][1] == '-' && argv[0][2] == '\0')
argv++;
return argv;
}
static int FAST_FUNC builtin_cd(char **argv) static int FAST_FUNC builtin_cd(char **argv)
{ {
const char *newdir; const char *newdir;