sleep: fix "sleep -- ARGS"
No binary (build failed)
—
(log yok)
| @@ -425,9 +425,9 @@ int printf_main(int argc UNUSED_PARAM, char **argv) | |
| /* bash builtin errors out on "printf '-%s-\n' foo", | |
| * coreutils-6.9 works. Both work with "printf -- '-%s-\n' foo". | |
| * We will mimic coreutils. */ | |
| - | if (argv[1] && argv[1][0] == '-' && argv[1][1] == '-' && !argv[1][2]) |
| - | argv++; |
| - | if (!argv[1]) { |
| + | argv = skip_dash_dash(argv); |
| + | |
| + | if (!argv[0]) { |
| if ((ENABLE_ASH_PRINTF || ENABLE_HUSH_PRINTF) | |
| && applet_name[0] != 'p' | |
| ) { | |
| @@ -437,8 +437,8 @@ int printf_main(int argc UNUSED_PARAM, char **argv) | |
| bb_show_usage(); | |
| } | |
| - | format = argv[1]; |
| - | argv2 = argv + 2; |
| + | format = argv[0]; |
| + | argv2 = argv + 1; |
| conv_err = 0; | |
| do { | |
| @@ -71,8 +71,8 @@ int sleep_main(int argc UNUSED_PARAM, char **argv) | |
| * + we can't use bb_show_usage | |
| * + applet_name can be the name of the shell | |
| */ | |
| - | ++argv; |
| - | if (!*argv) { |
| + | argv = skip_dash_dash(argv); |
| + | if (!argv[0]) { |
| /* Without this, bare "sleep" in ash shows _ash_ --help */ | |
| /* (ash can be the "sh" applet as well, so check 2nd char) */ | |
| if (ENABLE_ASH_SLEEP && applet_name[1] != 'l') { | |
| @@ -1344,6 +1344,7 @@ int sanitize_env_if_suid(void) FAST_FUNC; | |
| /* For top, ps. Some argv[i] are replaced by malloced "-opt" strings */ | |
| void make_all_argv_opts(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 uint32_t option_mask32; | |
| uint32_t getopt32(char **argv, const char *applet_opts, ...) FAST_FUNC; | |
| @@ -8,11 +8,18 @@ | |
| */ | |
| #include "libbb.h" | |
| - | char* FAST_FUNC single_argv(char **argv) |
| + | char** FAST_FUNC skip_dash_dash(char **argv) |
| { | |
| - | if (argv[1] && strcmp(argv[1], "--") == 0) |
| + | argv++; |
| + | if (argv[0] && argv[0][0] == '-' && argv[0][1] == '-' && argv[0][2] == '\0') |
| argv++; | |
| - | if (!argv[1] || argv[2]) |
| + | return argv; |
| + | } |
| + | |
| + | char* FAST_FUNC single_argv(char **argv) |
| + | { |
| + | argv = skip_dash_dash(argv); |
| + | if (!argv[0] || argv[1]) |
| bb_show_usage(); | |
| - | return argv[1]; |
| + | return argv[0]; |
| } | |
| @@ -10883,14 +10883,6 @@ static int FAST_FUNC builtin_history(char **argv UNUSED_PARAM) | |
| } | |
| #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) | |
| { | |
| const char *newdir; | |