aboutsummaryrefslogtreecommitdiff
path: root/shell
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2017-07-03 21:31:16 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2017-07-18 19:20:58 +0200
commit442d522f0bc6f29c14a3e54a0af3aac68bb891a1 (patch)
treeaa36853bf59cf4b3d4808d391ab31a714c3fc28c /shell
parentceaffde51163394c47fec34dac8663ae8152a699 (diff)
downloadbusybox-w32-442d522f0bc6f29c14a3e54a0af3aac68bb891a1.tar.gz
busybox-w32-442d522f0bc6f29c14a3e54a0af3aac68bb891a1.tar.bz2
busybox-w32-442d522f0bc6f29c14a3e54a0af3aac68bb891a1.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.c26
-rw-r--r--shell/shell_common.c4
2 files changed, 7 insertions, 23 deletions
diff --git a/shell/hush.c b/shell/hush.c
index f5c1e5bc1..db8ca4f97 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -1486,8 +1486,6 @@ typedef struct save_arg_t {
1486 1486
1487static void save_and_replace_G_args(save_arg_t *sv, char **argv) 1487static void save_and_replace_G_args(save_arg_t *sv, char **argv)
1488{ 1488{
1489 int n;
1490
1491 sv->sv_argv0 = argv[0]; 1489 sv->sv_argv0 = argv[0];
1492 sv->sv_g_argv = G.global_argv; 1490 sv->sv_g_argv = G.global_argv;
1493 sv->sv_g_argc = G.global_argc; 1491 sv->sv_g_argc = G.global_argc;
@@ -1497,10 +1495,7 @@ static void save_and_replace_G_args(save_arg_t *sv, char **argv)
1497 G.global_argv = argv; 1495 G.global_argv = argv;
1498 IF_HUSH_SET(G.global_args_malloced = 0;) 1496 IF_HUSH_SET(G.global_args_malloced = 0;)
1499 1497
1500 n = 1; 1498 G.global_argc = 1 + string_array_len(argv + 1);
1501 while (*++argv)
1502 n++;
1503 G.global_argc = n;
1504} 1499}
1505 1500
1506static void restore_G_args(save_arg_t *sv, char **argv) 1501static void restore_G_args(save_arg_t *sv, char **argv)
@@ -6817,13 +6812,11 @@ static void exec_function(char ***to_free,
6817 char **argv) 6812 char **argv)
6818{ 6813{
6819# if BB_MMU 6814# if BB_MMU
6820 int n = 1; 6815 int n;
6821 6816
6822 argv[0] = G.global_argv[0]; 6817 argv[0] = G.global_argv[0];
6823 G.global_argv = argv; 6818 G.global_argv = argv;
6824 while (*++argv) 6819 G.global_argc = n = 1 + string_array_len(argv + 1);
6825 n++;
6826 G.global_argc = n;
6827 /* On MMU, funcp->body is always non-NULL */ 6820 /* On MMU, funcp->body is always non-NULL */
6828 n = run_list(funcp->body); 6821 n = run_list(funcp->body);
6829 fflush_all(); 6822 fflush_all();
@@ -8829,12 +8822,8 @@ static int FAST_FUNC builtin_true(char **argv UNUSED_PARAM)
8829#if ENABLE_HUSH_TEST || ENABLE_HUSH_ECHO || ENABLE_HUSH_PRINTF || ENABLE_HUSH_KILL 8822#if ENABLE_HUSH_TEST || ENABLE_HUSH_ECHO || ENABLE_HUSH_PRINTF || ENABLE_HUSH_KILL
8830static int run_applet_main(char **argv, int (*applet_main_func)(int argc, char **argv)) 8823static int run_applet_main(char **argv, int (*applet_main_func)(int argc, char **argv))
8831{ 8824{
8832 int argc = 0; 8825 int argc = string_array_len(argv);
8833 while (*argv) { 8826 return applet_main_func(argc, argv);
8834 argc++;
8835 argv++;
8836 }
8837 return applet_main_func(argc, argv - argc);
8838} 8827}
8839#endif 8828#endif
8840#if ENABLE_HUSH_TEST || BASH_TEST2 8829#if ENABLE_HUSH_TEST || BASH_TEST2
@@ -9381,10 +9370,7 @@ static int FAST_FUNC builtin_set(char **argv)
9381 /* This realloc's G.global_argv */ 9370 /* This realloc's G.global_argv */
9382 G.global_argv = pp = add_strings_to_strings(g_argv, argv, /*dup:*/ 1); 9371 G.global_argv = pp = add_strings_to_strings(g_argv, argv, /*dup:*/ 1);
9383 9372
9384 n = 1; 9373 G.global_argc = 1 + string_array_len(pp + 1);
9385 while (*++pp)
9386 n++;
9387 G.global_argc = n;
9388 9374
9389 return EXIT_SUCCESS; 9375 return EXIT_SUCCESS;
9390 9376
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) {