Blame SPECS/ksh-20120801-posix-exit.patch

Packit Service a8c26c
diff --git a/src/cmd/ksh93/sh/fault.c b/src/cmd/ksh93/sh/fault.c
Packit Service a8c26c
--- a/src/cmd/ksh93/sh/fault.c
Packit Service a8c26c
+++ b/src/cmd/ksh93/sh/fault.c
Packit Service a8c26c
@@ -643,7 +643,7 @@ void sh_done(void *ptr, register int sig)
Packit Service a8c26c
 	sfsync((Sfio_t*)sfstdin);
Packit Service a8c26c
 	sfsync((Sfio_t*)shp->outpool);
Packit Service a8c26c
 	sfsync((Sfio_t*)sfstdout);
Packit Service a8c26c
-	if(savxit&SH_EXITSIG)
Packit Service a8c26c
+	if((savxit&SH_EXITMASK) == shp->lastsig)
Packit Service a8c26c
 		sig = savxit&SH_EXITMASK;
Packit Service a8c26c
 	if(sig)
Packit Service a8c26c
 	{
Packit Service a8c26c
@@ -668,6 +668,12 @@ void sh_done(void *ptr, register int sig)
Packit Service a8c26c
 	if(sh_isoption(SH_NOEXEC))
Packit Service a8c26c
 		kiaclose((Lex_t*)shp->lex_context);
Packit Service a8c26c
 #endif /* SHOPT_KIA */
Packit Service a8c26c
+
Packit Service a8c26c
+	/* Return POSIX exit code if last process exits due to signal */
Packit Service a8c26c
+	if (savxit & SH_EXITSIG) {
Packit Service a8c26c
+		exit(128 + (savxit&SH_EXITMASK));
Packit Service a8c26c
+	}
Packit Service a8c26c
+
Packit Service a8c26c
 	exit(savxit&SH_EXITMASK);
Packit Service a8c26c
 }