From: Denis Vlasenko Date: Sun, 15 Jul 2007 01:13:25 +0000 (-0000) Subject: ash: make "jobs | cat" work like in bash (was giving empty output) X-Git-Tag: 1_7_0~141 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=bdc406d15d5efa45970ebaf404f0d2a411abff91;p=oweals%2Fbusybox.git ash: make "jobs | cat" work like in bash (was giving empty output) --- diff --git a/shell/ash.c b/shell/ash.c index 6173a2505..06c4698f9 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -4374,8 +4374,10 @@ clear_traps(void) } } } -/* lives far away from here, needed for forkchild */ + +/* Lives far away from here, needed for forkchild */ static void closescript(void); +/* Called after fork(), in child */ static void forkchild(struct job *jp, union node *n, int mode) { @@ -4419,11 +4421,18 @@ forkchild(struct job *jp, union node *n, int mode) setsignal(SIGQUIT); setsignal(SIGTERM); } +#if JOBS + /* For "jobs | cat" to work like in bash, we must retain list of jobs + * in child, but we do need to remove ourself */ + freejob(jp); +#else for (jp = curjob; jp; jp = jp->prev_job) freejob(jp); +#endif jobless = 0; } +/* Called after fork(), in parent */ static void forkparent(struct job *jp, union node *n, int mode, pid_t pid) {