[git commit] ash: make "jobs" work even in subshells

Denys Vlasenko vda.linux at googlemail.com
Thu Jul 23 22:16:59 UTC 2009


commit: http://git.busybox.net/busybox/commit/?id=e56f22ac6072a6279782951fe7aaf633d4d6052a
branch: http://git.busybox.net/busybox/commit/?id=refs/heads/master

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 shell/ash.c |   14 ++++++++++++--
 1 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/shell/ash.c b/shell/ash.c
index 3042516..613a66d 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -4541,8 +4541,11 @@ clear_traps(void)
 static void closescript(void);
 
 /* Called after fork(), in child */
+#if !JOBS
+# define forkchild(jp, n, mode) forkchild(jp, mode)
+#endif
 static void
-forkchild(struct job *jp, /*union node *n,*/ int mode)
+forkchild(struct job *jp, union node *n, int mode)
 {
 	int oldlvl;
 
@@ -4598,6 +4601,13 @@ forkchild(struct job *jp, /*union node *n,*/ int mode)
 		 * Take care of the second rule: */
 		setsignal(SIGQUIT);
 	}
+#if JOBS
+	if (n && n->type == NCMD && strcmp(n->ncmd.args->narg.text, "jobs") == 0) {
+		TRACE(("Job hack\n"));
+		freejob(curjob);
+		return;
+	}
+#endif
 	for (jp = curjob; jp; jp = jp->prev_job)
 		freejob(jp);
 	jobless = 0;
@@ -4659,7 +4669,7 @@ forkshell(struct job *jp, union node *n, int mode)
 		ash_msg_and_raise_error("can't fork");
 	}
 	if (pid == 0)
-		forkchild(jp, /*n,*/ mode);
+		forkchild(jp, n, mode);
 	else
 		forkparent(jp, n, mode, pid);
 	return pid;
-- 
1.6.3.3



More information about the busybox-cvs mailing list