← Commit list

791b222dd

Denys Vlasenko
Denys Vlasenko
2023-10-02
SUCCESS Duration: 154s

Subject

sleep: fix "sleep -- ARGS"

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

coreutils/printf.c+5 -5
@@ -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 {
coreutils/sleep.c+2 -2
@@ -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') {
include/libbb.h+1 -0
@@ -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;
libbb/single_argv.c+11 -4
@@ -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];
}
shell/hush.c+0 -8
@@ -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;