diff options
Diffstat (limited to 'shell/hush.c')
-rw-r--r-- | shell/hush.c | 112 |
1 files changed, 56 insertions, 56 deletions
diff --git a/shell/hush.c b/shell/hush.c index 84818ff..5da9757 100644 --- a/shell/hush.c +++ b/shell/hush.c @@ -12,7 +12,7 @@ * written Dec 2000 and Jan 2001 by Larry Doolittle. The * execution engine, the builtins, and much of the underlying * support has been adapted from busybox-0.49pre's lash, which is - * Copyright (C) 1999-2003 by Erik Andersen <andersen@codepoet.org> + * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org> * written by Erik Andersen <andersen@codepoet.org>. That, in turn, * is based in part on ladsh.c, by Michael K. Johnson and Erik W. * Troan, which they placed in the public domain. I don't know @@ -197,7 +197,7 @@ struct redir_struct { redir_type type; /* type of redirection */ int fd; /* file descriptor being redirected */ int dup; /* -1, or file descriptor being duplicated */ - struct redir_struct *next; /* pointer to the next redirect in the list */ + struct redir_struct *next; /* pointer to the next redirect in the list */ glob_t word; /* *word.gl_pathv is the filename */ }; @@ -248,7 +248,7 @@ char **global_argv; unsigned int global_argc; unsigned int last_return_code; extern char **environ; /* This is in <unistd.h>, but protected with __USE_GNU */ - + /* "globals" within this file */ static char *ifs; static char map[256]; @@ -421,7 +421,7 @@ static struct built_in_command bltins[] = { {"continue", "Continue for, while or until loop", builtin_not_written}, {"env", "Print all environment variables", builtin_env}, {"eval", "Construct and run shell command", builtin_eval}, - {"exec", "Exec command, replacing this shell with the exec'd process", + {"exec", "Exec command, replacing this shell with the exec'd process", builtin_exec}, {"exit", "Exit from shell()", builtin_exit}, {"export", "Set environment variable", builtin_export}, @@ -456,10 +456,10 @@ static int builtin_eval(struct child_prog *child) { char *str = NULL; int rcode = EXIT_SUCCESS; - + if (child->argv[1]) { str = make_string(child->argv + 1); - parse_string_outer(str, FLAG_EXIT_FROM_LOOP | + parse_string_outer(str, FLAG_EXIT_FROM_LOOP | FLAG_PARSE_SEMICOLON); free(str); rcode = last_return_code; @@ -873,7 +873,7 @@ static inline void cmdedit_set_initial_prompt(void) PS1 = getenv("PS1"); if(PS1==0) PS1 = "\\w \\$ "; -#endif +#endif } static inline void setup_prompt_string(int promptmode, char **prompt_str) @@ -919,7 +919,7 @@ static void get_user_input(struct in_str *i) i->p = the_command; } -/* This is the magic location that prints prompts +/* This is the magic location that prints prompts * and gets data back from the user */ static int file_get(struct in_str *i) { @@ -1110,14 +1110,14 @@ static void pseudo_exec(struct child_prog *child) } /* Check if the command matches any busybox internal commands - * ("applets") here. + * ("applets") here. * FIXME: This feature is not 100% safe, since * BusyBox is not fully reentrant, so we have no guarantee the things * from the .bss are still zeroed, or that things from .data are still * at their defaults. We could exec ourself from /proc/self/exe, but I * really dislike relying on /proc for things. We could exec ourself * from global_argv[0], but if we are in a chroot, we may not be able - * to find ourself... */ + * to find ourself... */ #ifdef CONFIG_FEATURE_SH_STANDALONE_SHELL { int argc_l; @@ -1196,7 +1196,7 @@ static void insert_bg_job(struct pipe *pi) } } - /* we don't wait for background thejobs to return -- append it + /* we don't wait for background thejobs to return -- append it to the list of backgrounded thejobs and leave it alone */ printf("[%d] %d\n", thejob->jobid, thejob->progs[0].pid); last_bg_pid = thejob->progs[0].pid; @@ -1226,7 +1226,7 @@ static void remove_bg_job(struct pipe *pi) free(pi); } -/* Checks to see if any processes have exited -- if they +/* Checks to see if any processes have exited -- if they have, figure out why and see if a job has completed */ static int checkjobs(struct pipe* fg_pipe) { @@ -1246,7 +1246,7 @@ static int checkjobs(struct pipe* fg_pipe) int i, rcode = 0; for (i=0; i < fg_pipe->num_progs; i++) { if (fg_pipe->progs[i].pid == childpid) { - if (i==fg_pipe->num_progs-1) + if (i==fg_pipe->num_progs-1) rcode=WEXITSTATUS(status); (fg_pipe->num_progs)--; return(rcode); @@ -1289,7 +1289,7 @@ static int checkjobs(struct pipe* fg_pipe) if (pi->stopped_progs == pi->num_progs) { printf("\n"JOB_STATUS_FORMAT, pi->jobid, "Stopped", pi->text); } -#endif +#endif } } @@ -1378,7 +1378,7 @@ static int run_pipe_real(struct pipe *pi) /* Ok, this case is tricky. We have to decide if this is a * local variable, or an already exported variable. If it is * already exported, we have to export the new value. If it is - * not exported, we need only set this as a local variable. + * not exported, we need only set this as a local variable. * This junk is all to decide whether or not to export this * variable. */ int export_me=0; @@ -1408,7 +1408,7 @@ static int run_pipe_real(struct pipe *pi) } if (child->sp) { char * str = NULL; - + str = make_string((child->argv + i)); parse_string_outer(str, FLAG_EXIT_FROM_LOOP | FLAG_REPARSING); free(str); @@ -1454,7 +1454,7 @@ static int run_pipe_real(struct pipe *pi) #if !defined(__UCLIBC__) || defined(__UCLIBC_HAS_MMU__) if (!(child->pid = fork())) #else - if (!(child->pid = vfork())) + if (!(child->pid = vfork())) #endif { /* Set the handling for job control signals back to the default. */ @@ -1465,7 +1465,7 @@ static int run_pipe_real(struct pipe *pi) signal(SIGTTIN, SIG_DFL); signal(SIGTTOU, SIG_DFL); signal(SIGCHLD, SIG_DFL); - + close_all(); if (nextin != 0) { @@ -1497,7 +1497,7 @@ static int run_pipe_real(struct pipe *pi) pseudo_exec(child); } - + /* put our child in the process group whose leader is the first process in this pipe */ @@ -1513,7 +1513,7 @@ static int run_pipe_real(struct pipe *pi) if (nextout != 1) close(nextout); - /* If there isn't another process, nextin is garbage + /* If there isn't another process, nextin is garbage but it doesn't matter */ nextin = pipefds[0]; } @@ -1539,12 +1539,12 @@ static int run_list_real(struct pipe *pi) (rpipe->next == NULL)) { syntax(); return 1; - } - if ((rpipe->r_mode == RES_IN && - (rpipe->next->r_mode == RES_IN && + } + if ((rpipe->r_mode == RES_IN && + (rpipe->next->r_mode == RES_IN && rpipe->next->progs->argv != NULL))|| (rpipe->r_mode == RES_FOR && - rpipe->next->r_mode != RES_IN)) { + rpipe->next->r_mode != RES_IN)) { syntax(); return 1; } @@ -1572,7 +1572,7 @@ static int run_list_real(struct pipe *pi) if (rmode == RES_ELIF && !if_code) continue; if (rmode == RES_FOR && pi->num_progs) { if (!list) { - /* if no variable values after "in" we skip "for" */ + /* if no variable values after "in" we skip "for" */ if (!pi->next->progs->argv) continue; /* create list of variable values */ list = make_list_in(pi->next->progs->argv, @@ -1581,7 +1581,7 @@ static int run_list_real(struct pipe *pi) save_name = pi->progs->argv[0]; pi->progs->argv[0] = NULL; flag_rep = 1; - } + } if (!(*list)) { free(pi->progs->argv[0]); free(save_list); @@ -1591,26 +1591,26 @@ static int run_list_real(struct pipe *pi) pi->progs->glob_result.gl_pathv[0] = pi->progs->argv[0]; continue; - } else { + } else { /* insert new value from list for variable */ - if (pi->progs->argv[0]) + if (pi->progs->argv[0]) free(pi->progs->argv[0]); pi->progs->argv[0] = *list++; pi->progs->glob_result.gl_pathv[0] = pi->progs->argv[0]; } - } + } if (rmode == RES_IN) continue; if (rmode == RES_DO) { if (!flag_rep) continue; - } + } if ((rmode == RES_DONE)) { if (flag_rep) { flag_restore = 1; } else { rpipe = NULL; } - } + } if (pi->num_progs == 0) continue; save_num_progs = pi->num_progs; /* save number of programs */ rcode = run_pipe_real(pi); @@ -1642,9 +1642,9 @@ static int run_list_real(struct pipe *pi) pi->num_progs = save_num_progs; /* restore number of programs */ if ( rmode == RES_IF || rmode == RES_ELIF ) next_if_code=rcode; /* can be overwritten a number of times */ - if (rmode == RES_WHILE) + if (rmode == RES_WHILE) flag_rep = !last_return_code; - if (rmode == RES_UNTIL) + if (rmode == RES_UNTIL) flag_rep = last_return_code; if ( (rcode==EXIT_SUCCESS && pi->followup==PIPE_OR) || (rcode!=EXIT_SUCCESS && pi->followup==PIPE_AND) ) @@ -1723,7 +1723,7 @@ static int free_pipe_list(struct pipe *head, int indent) pi->next=NULL; free(pi); } - return rcode; + return rcode; } /* Select which version we will use */ @@ -1732,7 +1732,7 @@ static int run_list(struct pipe *pi) int rcode=0; if (fake_mode==0) { rcode = run_list_real(pi); - } + } /* free_pipe_list has the side effect of clearing memory * In the long run that function can be merged with run_list_real, * but doing that now would hobble the debugging effort. */ @@ -1862,7 +1862,7 @@ static int set_local_var(const char *s, int flg_export) /* Assume when we enter this function that we are already in * NAME=VALUE format. So the first order of business is to - * split 's' on the '=' into 'name' and 'value' */ + * split 's' on the '=' into 'name' and 'value' */ value = strchr(name, '='); if (value==0 && ++value==0) { free(name); @@ -1991,7 +1991,7 @@ static int setup_redirect(struct p_context *ctx, int fd, redir_type style, debug_printf("Redirect type %d%s\n", redir->fd, redir_table[style].descrip); - /* Check for a '2>&1' type redirect */ + /* Check for a '2>&1' type redirect */ redir->dup = redirect_dup_num(input); if (redir->dup == -2) return 1; /* syntax error */ if (redir->dup != -1) { @@ -2377,9 +2377,9 @@ static int parse_group(o_string *dest, struct p_context *ctx, static char *lookup_param(char *src) { char *p=NULL; - if (src) { + if (src) { p = getenv(src); - if (!p) + if (!p) p = get_local_var(src); } return p; @@ -2499,7 +2499,7 @@ int parse_stream(o_string *dest, struct p_context *ctx, if (m==2) { /* unquoted IFS */ if (done_word(dest, ctx)) { return 1; - } + } /* If we aren't performing a substitution, treat a newline as a * command separator. */ if (end_trigger != '\0' && ch=='\n') @@ -2624,7 +2624,7 @@ int parse_stream(o_string *dest, struct p_context *ctx, } /* complain if quote? No, maybe we just finished a command substitution * that was quoted. Example: - * $ echo "`cat foo` plus more" + * $ echo "`cat foo` plus more" * and we just got the EOF generated by the subshell that ran "cat foo" * The only real complaint is if we got an EOF when end_trigger != '\0', * that is, we were really supposed to get end_trigger, and never got @@ -2684,7 +2684,7 @@ int parse_stream_outer(struct in_str *inp, int flag) if (ctx.old_flag != 0) { free(ctx.stack); b_reset(&temp); - } + } temp.nonnull = 0; temp.quote = 0; inp->p = NULL; @@ -2748,9 +2748,9 @@ int hush_main(int argc, char **argv) /* XXX what should these be while sourcing /etc/profile? */ global_argc = argc; global_argv = argv; - + /* (re?) initialize globals. Sometimes hush_main() ends up calling - * hush_main(), therefore we cannot rely on the BSS to zero out this + * hush_main(), therefore we cannot rely on the BSS to zero out this * stuff. Reset these to 0 every time. */ ifs = NULL; /* map[] is taken care of with call to update_ifs_map() */ @@ -2770,7 +2770,7 @@ int hush_main(int argc, char **argv) #endif PS2 = "> "; - /* initialize our shell local variables with the values + /* initialize our shell local variables with the values * currently living in the environment */ if (e) { for (; *e; e++) @@ -2790,7 +2790,7 @@ int hush_main(int argc, char **argv) } } input=stdin; - + while ((opt = getopt(argc, argv, "c:xif")) > 0) { switch (opt) { case 'c': @@ -2832,13 +2832,13 @@ int hush_main(int argc, char **argv) debug_printf("\ninteractive=%d\n", interactive); if (interactive) { /* Looks like they want an interactive shell */ -#ifndef CONFIG_FEATURE_SH_EXTRA_QUIET +#ifndef CONFIG_FEATURE_SH_EXTRA_QUIET printf( "\n\n" BB_BANNER " hush - the humble shell v0.01 (testing)\n"); printf( "Enter 'help' for a list of built-in commands.\n\n"); #endif setup_job_control(); } - + if (argv[optind]==NULL) { opt=parse_file_outer(stdin); goto final_return; @@ -2877,7 +2877,7 @@ static char *insert_var_value(char *inp) int len; int done = 0; char *p, *p1, *res_str = NULL; - + while ((p = strchr(inp, SPECIAL_VAR_SYMBOL))) { if (p != inp) { len = p - inp; @@ -2893,7 +2893,7 @@ static char *insert_var_value(char *inp) res_str = xrealloc(res_str, (1 + len)); strcpy((res_str + res_str_len), p1); res_str_len = len; - } + } *p = SPECIAL_VAR_SYMBOL; inp = ++p; done = 1; @@ -2915,8 +2915,8 @@ static char **make_list_in(char **inp, char *name) int n = 0; char **list; char *p1, *p2, *p3; - - /* create list of variable values */ + + /* create list of variable values */ list = xmalloc(sizeof(*list)); for (i = 0; inp[i]; i++) { p3 = insert_var_value(inp[i]); @@ -2928,13 +2928,13 @@ static char **make_list_in(char **inp, char *name) } if ((p2 = strchr(p1, ' '))) { len = p2 - p1; - } else { + } else { len = strlen(p1); p2 = p1 + len; } - /* we use n + 2 in realloc for list,because we add + /* we use n + 2 in realloc for list,because we add * new element and then we will add NULL element */ - list = xrealloc(list, sizeof(*list) * (n + 2)); + list = xrealloc(list, sizeof(*list) * (n + 2)); list[n] = xmalloc(2 + name_len + len); strcpy(list[n], name); strcat(list[n], "="); @@ -2946,7 +2946,7 @@ static char **make_list_in(char **inp, char *name) } list[n] = NULL; return list; -} +} /* Make new string for parser */ static char * make_string(char ** inp) |