Blame SPECS/ksh-20120801-fd2lost.patch

Packit Service a8c26c
diff -up ksh-20120801/src/cmd/ksh93/sh/macro.c.fd2lost ksh-20120801/src/cmd/ksh93/sh/macro.c
Packit Service a8c26c
--- ksh-20120801/src/cmd/ksh93/sh/macro.c.fd2lost	2014-01-22 16:23:21.211658984 +0100
Packit Service a8c26c
+++ ksh-20120801/src/cmd/ksh93/sh/macro.c	2014-01-22 16:23:21.243658703 +0100
Packit Service a8c26c
@@ -391,7 +391,7 @@ void sh_machere(Shell_t *shp,Sfio_t *inf
Packit Service a8c26c
 				break;
Packit Service a8c26c
 			    }
Packit Service a8c26c
 			    case S_PAR:
Packit Service a8c26c
-				comsubst(mp,(Shnode_t*)0,1);
Packit Service a8c26c
+				comsubst(mp,(Shnode_t*)0,3);
Packit Service a8c26c
 				break;
Packit Service a8c26c
 			    case S_EOF:
Packit Service a8c26c
 				if((c=fcfill()) > 0)
Packit Service a8c26c
@@ -1165,7 +1165,7 @@ retry1:
Packit Service a8c26c
 	    case S_PAR:
Packit Service a8c26c
 		if(type)
Packit Service a8c26c
 			goto nosub;
Packit Service a8c26c
-		comsubst(mp,(Shnode_t*)0,1);
Packit Service a8c26c
+		comsubst(mp,(Shnode_t*)0,3);
Packit Service a8c26c
 		return(1);
Packit Service a8c26c
 	    case S_DIG:
Packit Service a8c26c
 		var = 0;
Packit Service a8c26c
diff -up ksh-20120801/src/cmd/ksh93/sh/subshell.c.fd2lost ksh-20120801/src/cmd/ksh93/sh/subshell.c
Packit Service a8c26c
--- ksh-20120801/src/cmd/ksh93/sh/subshell.c.fd2lost	2014-01-22 16:23:21.222658887 +0100
Packit Service a8c26c
+++ ksh-20120801/src/cmd/ksh93/sh/subshell.c	2014-01-22 16:23:21.243658703 +0100
Packit Service a8c26c
@@ -122,7 +122,8 @@ void	sh_subtmpfile(Shell_t *shp)
Packit Service a8c26c
 		else if(errno!=EBADF)
Packit Service a8c26c
 			errormsg(SH_DICT,ERROR_system(1),e_toomany);
Packit Service a8c26c
 		/* popping a discipline forces a /tmp file create */
Packit Service a8c26c
-		sfdisc(sfstdout,SF_POPDISC);
Packit Service a8c26c
+		if(shp->comsub != 1)
Packit Service a8c26c
+			sfdisc(sfstdout,SF_POPDISC);
Packit Service a8c26c
 		if((fd=sffileno(sfstdout))<0)
Packit Service a8c26c
 		{
Packit Service a8c26c
 			/* unable to create the /tmp file so use a pipe */
Packit Service a8c26c
@@ -635,6 +636,13 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
Packit Service a8c26c
 		}
Packit Service a8c26c
 		else
Packit Service a8c26c
 		{
Packit Service a8c26c
+			if(comsub!=1 && shp->spid)
Packit Service a8c26c
+			{
Packit Service a8c26c
+				job_wait(shp->spid);
Packit Service a8c26c
+				if(shp->pipepid==shp->spid)
Packit Service a8c26c
+					shp->spid = 0;
Packit Service a8c26c
+				shp->pipepid = 0;
Packit Service a8c26c
+			}
Packit Service a8c26c
 			/* move tmp file to iop and restore sfstdout */
Packit Service a8c26c
 			iop = sfswap(sfstdout,NIL(Sfio_t*));
Packit Service a8c26c
 			if(!iop)
Packit Service a8c26c
diff -up ksh-20120801/src/cmd/ksh93/sh/xec.c.fd2lost ksh-20120801/src/cmd/ksh93/sh/xec.c
Packit Service a8c26c
--- ksh-20120801/src/cmd/ksh93/sh/xec.c.fd2lost	2014-01-22 16:23:21.237658756 +0100
Packit Service a8c26c
+++ ksh-20120801/src/cmd/ksh93/sh/xec.c	2014-01-22 16:38:36.374666019 +0100
Packit Service a8c26c
@@ -1756,6 +1756,8 @@ int sh_exec(register const Shnode_t *t,
Packit Service a8c26c
 					nlock--;
Packit Service a8c26c
 					job_unlock();
Packit Service a8c26c
 				}
Packit Service a8c26c
+				if(shp->subshell)
Packit Service a8c26c
+					shp->spid = parent;
Packit Service a8c26c
 				if(type&FPCL)
Packit Service a8c26c
 					sh_close(shp->inpipe[0]);
Packit Service a8c26c
 				if(type&(FCOOP|FAMP))
Packit Service a8c26c
@@ -1771,7 +1773,11 @@ int sh_exec(register const Shnode_t *t,
Packit Service a8c26c
 					if(shp->pipepid)
Packit Service a8c26c
 						shp->pipepid = parent;
Packit Service a8c26c
 					else
Packit Service a8c26c
+					{
Packit Service a8c26c
 						job_wait(parent);
Packit Service a8c26c
+						if(parent==shp->spid)
Packit Service a8c26c
+							shp->spid = 0;
Packit Service a8c26c
+					}
Packit Service a8c26c
 					if(shp->topfd > topfd)
Packit Service a8c26c
 						sh_iorestore(shp,topfd,0);
Packit Service a8c26c
 					if(usepipe && tsetio &&  subdup && unpipe)