diff options
author | Denys Vlasenko <vda.linux@googlemail.com> | 2017-07-03 21:31:16 +0200 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2017-07-03 21:31:16 +0200 |
commit | d4e4fdb5ce5ccc067b3d35d877f7a7d978869517 (patch) | |
tree | bac3e4a55fa72db0c67d377b90869b4d63e8c3c9 /shell | |
parent | 2e989ef232e35750df573898077dd356003705b2 (diff) | |
download | busybox-w32-d4e4fdb5ce5ccc067b3d35d877f7a7d978869517.tar.gz busybox-w32-d4e4fdb5ce5ccc067b3d35d877f7a7d978869517.tar.bz2 busybox-w32-d4e4fdb5ce5ccc067b3d35d877f7a7d978869517.zip |
fixes for bugs found by make_single_applets.sh
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'shell')
-rw-r--r-- | shell/hush.c | 26 | ||||
-rw-r--r-- | shell/shell_common.c | 4 |
2 files changed, 7 insertions, 23 deletions
diff --git a/shell/hush.c b/shell/hush.c index fc6db316e..30add72f0 100644 --- a/shell/hush.c +++ b/shell/hush.c | |||
@@ -1478,8 +1478,6 @@ typedef struct save_arg_t { | |||
1478 | 1478 | ||
1479 | static void save_and_replace_G_args(save_arg_t *sv, char **argv) | 1479 | static void save_and_replace_G_args(save_arg_t *sv, char **argv) |
1480 | { | 1480 | { |
1481 | int n; | ||
1482 | |||
1483 | sv->sv_argv0 = argv[0]; | 1481 | sv->sv_argv0 = argv[0]; |
1484 | sv->sv_g_argv = G.global_argv; | 1482 | sv->sv_g_argv = G.global_argv; |
1485 | sv->sv_g_argc = G.global_argc; | 1483 | sv->sv_g_argc = G.global_argc; |
@@ -1489,10 +1487,7 @@ static void save_and_replace_G_args(save_arg_t *sv, char **argv) | |||
1489 | G.global_argv = argv; | 1487 | G.global_argv = argv; |
1490 | IF_HUSH_SET(G.global_args_malloced = 0;) | 1488 | IF_HUSH_SET(G.global_args_malloced = 0;) |
1491 | 1489 | ||
1492 | n = 1; | 1490 | G.global_argc = 1 + string_array_len(argv + 1); |
1493 | while (*++argv) | ||
1494 | n++; | ||
1495 | G.global_argc = n; | ||
1496 | } | 1491 | } |
1497 | 1492 | ||
1498 | static void restore_G_args(save_arg_t *sv, char **argv) | 1493 | static void restore_G_args(save_arg_t *sv, char **argv) |
@@ -6809,13 +6804,11 @@ static void exec_function(char ***to_free, | |||
6809 | char **argv) | 6804 | char **argv) |
6810 | { | 6805 | { |
6811 | # if BB_MMU | 6806 | # if BB_MMU |
6812 | int n = 1; | 6807 | int n; |
6813 | 6808 | ||
6814 | argv[0] = G.global_argv[0]; | 6809 | argv[0] = G.global_argv[0]; |
6815 | G.global_argv = argv; | 6810 | G.global_argv = argv; |
6816 | while (*++argv) | 6811 | G.global_argc = n = 1 + string_array_len(argv + 1); |
6817 | n++; | ||
6818 | G.global_argc = n; | ||
6819 | /* On MMU, funcp->body is always non-NULL */ | 6812 | /* On MMU, funcp->body is always non-NULL */ |
6820 | n = run_list(funcp->body); | 6813 | n = run_list(funcp->body); |
6821 | fflush_all(); | 6814 | fflush_all(); |
@@ -8811,12 +8804,8 @@ static int FAST_FUNC builtin_true(char **argv UNUSED_PARAM) | |||
8811 | #if ENABLE_HUSH_TEST || ENABLE_HUSH_ECHO || ENABLE_HUSH_PRINTF || ENABLE_HUSH_KILL | 8804 | #if ENABLE_HUSH_TEST || ENABLE_HUSH_ECHO || ENABLE_HUSH_PRINTF || ENABLE_HUSH_KILL |
8812 | static int run_applet_main(char **argv, int (*applet_main_func)(int argc, char **argv)) | 8805 | static int run_applet_main(char **argv, int (*applet_main_func)(int argc, char **argv)) |
8813 | { | 8806 | { |
8814 | int argc = 0; | 8807 | int argc = string_array_len(argv); |
8815 | while (*argv) { | 8808 | return applet_main_func(argc, argv); |
8816 | argc++; | ||
8817 | argv++; | ||
8818 | } | ||
8819 | return applet_main_func(argc, argv - argc); | ||
8820 | } | 8809 | } |
8821 | #endif | 8810 | #endif |
8822 | #if ENABLE_HUSH_TEST || BASH_TEST2 | 8811 | #if ENABLE_HUSH_TEST || BASH_TEST2 |
@@ -9363,10 +9352,7 @@ static int FAST_FUNC builtin_set(char **argv) | |||
9363 | /* This realloc's G.global_argv */ | 9352 | /* This realloc's G.global_argv */ |
9364 | G.global_argv = pp = add_strings_to_strings(g_argv, argv, /*dup:*/ 1); | 9353 | G.global_argv = pp = add_strings_to_strings(g_argv, argv, /*dup:*/ 1); |
9365 | 9354 | ||
9366 | n = 1; | 9355 | G.global_argc = 1 + string_array_len(pp + 1); |
9367 | while (*++pp) | ||
9368 | n++; | ||
9369 | G.global_argc = n; | ||
9370 | 9356 | ||
9371 | return EXIT_SUCCESS; | 9357 | return EXIT_SUCCESS; |
9372 | 9358 | ||
diff --git a/shell/shell_common.c b/shell/shell_common.c index 03b7d0b75..bf56f3d78 100644 --- a/shell/shell_common.c +++ b/shell/shell_common.c | |||
@@ -405,9 +405,7 @@ shell_builtin_ulimit(char **argv) | |||
405 | */ | 405 | */ |
406 | GETOPT_RESET(); | 406 | GETOPT_RESET(); |
407 | 407 | ||
408 | argc = 1; | 408 | argc = string_array_len(argv); |
409 | while (argv[argc]) | ||
410 | argc++; | ||
411 | 409 | ||
412 | opts = 0; | 410 | opts = 0; |
413 | while (1) { | 411 | while (1) { |