Blob Blame Raw
--- ksh-20070328/src/cmd/ksh93/sh/jobs.c.exit19	2007-05-22 11:51:10.000000000 +0200
+++ ksh-20070328/src/cmd/ksh93/sh/jobs.c	2007-05-22 11:55:55.000000000 +0200
@@ -307,7 +307,8 @@
 			else
 			{
 				pw->p_flag |= (P_DONE|P_NOTIFY);
-				if(WEXITSTATUS(wstat) > pw->p_exit)
+				pw->p_exit =  pw->p_exitmin;
+				if(WEXITSTATUS(wstat) > pw->p_exitmin)
 					pw->p_exit = WEXITSTATUS(wstat);
 			}
 			if(pw->p_pgrp==0)
@@ -1068,8 +1069,8 @@
 	pw->p_env = sh.curenv;
 	pw->p_pid = pid;
 	pw->p_flag = P_EXITSAVE;
-	pw->p_exit = sh.xargexit;
-	sh.xargexit = 0;
+	pw->p_exitmin = sh.xargexit;
+	pw->p_exit = 0;
 	if(sh_isstate(SH_MONITOR))
 	{
 		if(killpg(job.curpgid,0)<0 && errno==ESRCH)
--- ksh-20070328/src/cmd/ksh93/include/jobs.h.exit19	2007-05-22 11:51:29.000000000 +0200
+++ ksh-20070328/src/cmd/ksh93/include/jobs.h	2007-05-22 11:52:14.000000000 +0200
@@ -64,6 +64,7 @@
 	pid_t		p_fgrp;		/* process group when stopped */
 	short		p_job;		/* job number of process */
 	unsigned short	p_exit;		/* exit value or signal number */
+	unsigned short	p_exitmin;	/* minimum exit value for xargs */
 	unsigned char	p_flag;		/* flags - see below */
 	int		p_env;		/* subshell environment number */
 #ifdef JOBS