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) { |
