diff options
author | Erik Andersen | 2000-05-19 05:35:19 +0000 |
---|---|---|
committer | Erik Andersen | 2000-05-19 05:35:19 +0000 |
commit | 330fd2b5767110f29544131d4c72c77e0506b6df (patch) | |
tree | aa360774a903d3ebb0b2b5f3031c2e359f9c3afb /sh.c | |
parent | d356c6e9d1bc091c64200ecc401aa9b6ffb53151 (diff) | |
download | busybox-330fd2b5767110f29544131d4c72c77e0506b6df.zip busybox-330fd2b5767110f29544131d4c72c77e0506b6df.tar.gz |
More libc portability updates, add in the website (which has not been
archived previously). Wrote 'which' during the meeting today.
-Erik
Diffstat (limited to 'sh.c')
-rw-r--r-- | sh.c | 21 |
1 files changed, 18 insertions, 3 deletions
@@ -113,13 +113,18 @@ static int busy_loop(FILE * input); static struct builtInCommand bltins[] = { {"bg", "Resume a job in the background", "bg [%%job]", shell_fg_bg}, {"cd", "Change working directory", "cd [dir]", shell_cd}, - {"env", "Print all environment variables", "env", shell_env}, {"exit", "Exit from shell()", "exit", shell_exit}, {"fg", "Bring job into the foreground", "fg [%%job]", shell_fg_bg}, {"jobs", "Lists the active jobs", "jobs", shell_jobs}, - {"pwd", "Print current directory", "pwd", shell_pwd}, {"export", "Set environment variable", "export [VAR=value]", shell_export}, {"unset", "Unset environment variable", "unset VAR", shell_unset}, + {NULL, NULL, NULL, NULL} +}; + +/* Table of built-in functions */ +static struct builtInCommand bltins_forking[] = { + {"env", "Print all environment variables", "env", shell_env}, + {"pwd", "Print current directory", "pwd", shell_pwd}, {".", "Source-in and run commands in a file", ". filename", shell_source}, {"help", "List shell built-in commands", "help", shell_help}, {NULL, NULL, NULL, NULL} @@ -247,6 +252,9 @@ static int shell_help(struct job *cmd, struct jobSet *junk) for (x = bltins; x->cmd; x++) { fprintf(stdout, "%s\t%s\n", x->cmd, x->descr); } + for (x = bltins_forking; x->cmd; x++) { + fprintf(stdout, "%s\t%s\n", x->cmd, x->descr); + } fprintf(stdout, "\n\n"); return TRUE; } @@ -743,6 +751,13 @@ static int runCommand(struct job newJob, struct jobSet *jobList, int inBg) nextout = 1; } + /* Match any built-ins here */ + for (x = bltins; x->cmd; x++) { + if (!strcmp(newJob.progs[i].argv[0], x->cmd)) { + return (x->function(&newJob, jobList)); + } + } + if (!(newJob.progs[i].pid = fork())) { signal(SIGTTOU, SIG_DFL); @@ -760,7 +775,7 @@ static int runCommand(struct job newJob, struct jobSet *jobList, int inBg) setupRedirections(newJob.progs + i); /* Match any built-ins here */ - for (x = bltins; x->cmd; x++) { + for (x = bltins_forking; x->cmd; x++) { if (!strcmp(newJob.progs[i].argv[0], x->cmd)) { exit (x->function(&newJob, jobList)); } |