diff options
Diffstat (limited to 'shell/lash.c')
-rw-r--r-- | shell/lash.c | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/shell/lash.c b/shell/lash.c index ce1ce7f..781dfdb 100644 --- a/shell/lash.c +++ b/shell/lash.c @@ -157,8 +157,8 @@ static int shell_context; /* Type prompt trigger (PS1 or PS2) */ static char *cwd; static char *local_pending_command; static struct jobset job_list = { NULL, NULL }; -static int argc; -static char **argv; +static int global_argc; +static char **global_argv; static llist_t *close_me_list; static int last_return_code; static int last_bg_pid; @@ -810,16 +810,16 @@ static int expand_arguments(char *command) var = itoa(getpid()); break; case '#': - var = itoa(argc-1); + var = itoa(global_argc - 1); break; case '0':case '1':case '2':case '3':case '4': case '5':case '6':case '7':case '8':case '9': { int ixx = *(dst+1)-48+1; - if (ixx >= argc) { + if (ixx >= global_argc) { var = '\0'; } else { - var = argv[ixx]; + var = global_argv[ixx]; } } break; @@ -1492,12 +1492,13 @@ static inline void setup_job_control(void) #endif int lash_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE; -int lash_main(int argc_l, char **argv_l) +int lash_main(int argc, char **argv) { unsigned opt; FILE *input = stdin; - argc = argc_l; - argv = argv_l; + + global_argc = argc; + global_argv = argv; #if ENABLE_FEATURE_EDITING line_input_state = new_line_input_t(FOR_SHELL); @@ -1510,7 +1511,7 @@ int lash_main(int argc_l, char **argv_l) job_list.fg = NULL; last_return_code = 1; - if (argv[0] && argv[0][0] == '-') { + if (global_argv[0] && global_argv[0][0] == '-') { FILE *prof_input; prof_input = fopen("/etc/profile", "r"); if (prof_input) { @@ -1522,13 +1523,13 @@ int lash_main(int argc_l, char **argv_l) } } - opt = getopt32(argv_l, "+ic:", &local_pending_command); + opt = getopt32(argv, "+ic:", &local_pending_command); #define LASH_OPT_i (1<<0) #define LASH_OPT_c (1<<1) if (opt & LASH_OPT_c) { input = NULL; optind++; - argv += optind; + global_argv += optind; } /* A shell is interactive if the `-i' flag was given, or if all of * the following conditions are met: @@ -1537,7 +1538,7 @@ int lash_main(int argc_l, char **argv_l) * standard input is a terminal * standard output is a terminal * Refer to Posix.2, the description of the `sh' utility. */ - if (argv[optind] == NULL && input == stdin + if (global_argv[optind] == NULL && input == stdin && isatty(STDIN_FILENO) && isatty(STDOUT_FILENO) ) { opt |= LASH_OPT_i; @@ -1550,9 +1551,9 @@ int lash_main(int argc_l, char **argv_l) "Enter 'help' for a list of built-in commands.\n\n", bb_banner); } - } else if (!local_pending_command && argv[optind]) { + } else if (!local_pending_command && global_argv[optind]) { //printf( "optind=%d argv[optind]='%s'\n", optind, argv[optind]); - input = xfopen(argv[optind], "r"); + input = xfopen(global_argv[optind], "r"); /* be lazy, never mark this closed */ llist_add_to(&close_me_list, (void *)(long)fileno(input)); } |