--- 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