diff options
Diffstat (limited to 'shell')
-rw-r--r-- | shell/ash.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/shell/ash.c b/shell/ash.c index 6283d3c28..735364962 100644 --- a/shell/ash.c +++ b/shell/ash.c | |||
@@ -384,7 +384,11 @@ static void forkshell_init(const char *idstr); | |||
384 | static void forkshell_child(struct forkshell *fs); | 384 | static void forkshell_child(struct forkshell *fs); |
385 | static void sticky_free(void *p); | 385 | static void sticky_free(void *p); |
386 | # define free(p) sticky_free(p) | 386 | # define free(p) sticky_free(p) |
387 | static void spawn_forkshell(struct job *jp, struct forkshell *fs, int mode); | 387 | #if !JOBS |
388 | #define spawn_forkshell(fs, jp, n, mode) spawn_forkshell(fs, jp, mode) | ||
389 | #endif | ||
390 | static void spawn_forkshell(struct forkshell *fs, struct job *jp, | ||
391 | union node *n, int mode); | ||
388 | # if FORKSHELL_DEBUG | 392 | # if FORKSHELL_DEBUG |
389 | static void forkshell_print(FILE *fp0, struct forkshell *fs, char **notes); | 393 | static void forkshell_print(FILE *fp0, struct forkshell *fs, char **notes); |
390 | # endif | 394 | # endif |
@@ -5747,7 +5751,7 @@ openhere(union node *redir) | |||
5747 | fs.n = redir; | 5751 | fs.n = redir; |
5748 | fs.fd[0] = pip[0]; | 5752 | fs.fd[0] = pip[0]; |
5749 | fs.fd[1] = pip[1]; | 5753 | fs.fd[1] = pip[1]; |
5750 | spawn_forkshell(NULL, &fs, FORK_NOJOB); | 5754 | spawn_forkshell(&fs, NULL, NULL, FORK_NOJOB); |
5751 | #else | 5755 | #else |
5752 | if (forkshell((struct job *)NULL, (union node *)NULL, FORK_NOJOB) == 0) { | 5756 | if (forkshell((struct job *)NULL, (union node *)NULL, FORK_NOJOB) == 0) { |
5753 | /* child */ | 5757 | /* child */ |
@@ -6842,7 +6846,7 @@ evalbackcmd(union node *n, struct backcmd *result) | |||
6842 | fs.n = n; | 6846 | fs.n = n; |
6843 | fs.fd[0] = pip[0]; | 6847 | fs.fd[0] = pip[0]; |
6844 | fs.fd[1] = pip[1]; | 6848 | fs.fd[1] = pip[1]; |
6845 | spawn_forkshell(jp, &fs, FORK_NOJOB); | 6849 | spawn_forkshell(&fs, jp, n, FORK_NOJOB); |
6846 | #else | 6850 | #else |
6847 | if (forkshell(jp, n, FORK_NOJOB) == 0) { | 6851 | if (forkshell(jp, n, FORK_NOJOB) == 0) { |
6848 | /* child */ | 6852 | /* child */ |
@@ -9825,7 +9829,7 @@ evalsubshell(union node *n, int flags) | |||
9825 | fs.fpid = FS_EVALSUBSHELL; | 9829 | fs.fpid = FS_EVALSUBSHELL; |
9826 | fs.n = n; | 9830 | fs.n = n; |
9827 | fs.flags = flags; | 9831 | fs.flags = flags; |
9828 | spawn_forkshell(jp, &fs, backgnd); | 9832 | spawn_forkshell(&fs, jp, n, backgnd); |
9829 | if ( 0 ) { | 9833 | if ( 0 ) { |
9830 | #else | 9834 | #else |
9831 | if (forkshell(jp, n, backgnd) == 0) { | 9835 | if (forkshell(jp, n, backgnd) == 0) { |
@@ -9956,7 +9960,7 @@ evalpipe(union node *n, int flags) | |||
9956 | fs.fd[0] = pip[0]; | 9960 | fs.fd[0] = pip[0]; |
9957 | fs.fd[1] = pip[1]; | 9961 | fs.fd[1] = pip[1]; |
9958 | fs.fd[2] = prevfd; | 9962 | fs.fd[2] = prevfd; |
9959 | spawn_forkshell(jp, &fs, n->npipe.pipe_backgnd); | 9963 | spawn_forkshell(&fs, jp, lp->n, n->npipe.pipe_backgnd); |
9960 | #else | 9964 | #else |
9961 | if (forkshell(jp, lp->n, n->npipe.pipe_backgnd) == 0) { | 9965 | if (forkshell(jp, lp->n, n->npipe.pipe_backgnd) == 0) { |
9962 | /* child */ | 9966 | /* child */ |
@@ -10781,7 +10785,7 @@ evalcommand(union node *cmd, int flags) | |||
10781 | fs.fd[0] = cmdentry.u.index; | 10785 | fs.fd[0] = cmdentry.u.index; |
10782 | fs.varlist = varlist.list; | 10786 | fs.varlist = varlist.list; |
10783 | jp = makejob(/*cmd,*/ 1); | 10787 | jp = makejob(/*cmd,*/ 1); |
10784 | spawn_forkshell(jp, &fs, FORK_FG); | 10788 | spawn_forkshell(&fs, jp, cmd, FORK_FG); |
10785 | status = waitforjob(jp); | 10789 | status = waitforjob(jp); |
10786 | INT_ON; | 10790 | INT_ON; |
10787 | TRACE(("forked child exited with %d\n", status)); | 10791 | TRACE(("forked child exited with %d\n", status)); |
@@ -15162,7 +15166,7 @@ reinitvar(void) | |||
15162 | } | 15166 | } |
15163 | 15167 | ||
15164 | static void | 15168 | static void |
15165 | spawn_forkshell(struct job *jp, struct forkshell *fs, int mode) | 15169 | spawn_forkshell(struct forkshell *fs, struct job *jp, union node *n, int mode) |
15166 | { | 15170 | { |
15167 | struct forkshell *new; | 15171 | struct forkshell *new; |
15168 | char buf[32]; | 15172 | char buf[32]; |
@@ -15182,7 +15186,7 @@ spawn_forkshell(struct job *jp, struct forkshell *fs, int mode) | |||
15182 | freejob(jp); | 15186 | freejob(jp); |
15183 | ash_msg_and_raise_error("unable to spawn shell"); | 15187 | ash_msg_and_raise_error("unable to spawn shell"); |
15184 | } | 15188 | } |
15185 | forkparent(jp, fs->node, mode, (HANDLE)ret); | 15189 | forkparent(jp, n, mode, (HANDLE)ret); |
15186 | } | 15190 | } |
15187 | 15191 | ||
15188 | /* | 15192 | /* |