summaryrefslogtreecommitdiff
path: root/source/ap/ksh93/patches/ksh-20120801-trapcom.patch
diff options
context:
space:
mode:
Diffstat (limited to 'source/ap/ksh93/patches/ksh-20120801-trapcom.patch')
-rw-r--r--source/ap/ksh93/patches/ksh-20120801-trapcom.patch47
1 files changed, 0 insertions, 47 deletions
diff --git a/source/ap/ksh93/patches/ksh-20120801-trapcom.patch b/source/ap/ksh93/patches/ksh-20120801-trapcom.patch
deleted file mode 100644
index a900b543..00000000
--- a/source/ap/ksh93/patches/ksh-20120801-trapcom.patch
+++ /dev/null
@@ -1,47 +0,0 @@
-diff -up ksh-20120801/src/cmd/ksh93/sh/subshell.c.orig ksh-20120801/src/cmd/ksh93/sh/subshell.c
---- ksh-20120801/src/cmd/ksh93/sh/subshell.c.orig 2014-08-23 20:20:24.676186573 -0300
-+++ ksh-20120801/src/cmd/ksh93/sh/subshell.c 2014-08-23 20:29:00.772151283 -0300
-@@ -481,12 +481,12 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
- {
- struct subshell sub_data;
- register struct subshell *sp = &sub_data;
-- int jmpval,nsig=0,duped=0;
-+ int jmpval,isig,nsig=0,duped=0;
- long savecurenv = shp->curenv;
- int savejobpgid = job.curpgid;
- int *saveexitval = job.exitval;
- int16_t subshell;
-- char *savsig;
-+ char **savsig;
- Sfio_t *iop=0;
- struct checkpt buff;
- struct sh_scoped savst;
-@@ -561,10 +561,13 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
- /* save trap table */
- shp->st.otrapcom = 0;
- shp->st.otrap = savst.trap;
-- if((nsig=shp->st.trapmax*sizeof(char*))>0 || shp->st.trapcom[0])
-+ if((nsig=shp->st.trapmax)>0 || shp->st.trapcom[0])
- {
-- nsig += sizeof(char*);
-- memcpy(savsig=malloc(nsig),(char*)&shp->st.trapcom[0],nsig);
-+ ++nsig;
-+ savsig = malloc(nsig * sizeof(char*));
-+ /* contents of shp->st.st.trapcom may change */
-+ for (isig = 0; isig < nsig; ++isig)
-+ savsig[isig] = shp->st.trapcom[isig] ? strdup(shp->st.trapcom[isig]) : NULL;
- /* this nonsense needed for $(trap) */
- shp->st.otrapcom = (char**)savsig;
- }
-@@ -729,7 +732,10 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
- shp->st.otrap = 0;
- if(nsig)
- {
-- memcpy((char*)&shp->st.trapcom[0],savsig,nsig);
-+ for (isig = 0; isig < nsig; ++isig)
-+ if (shp->st.trapcom[isig])
-+ free(shp->st.trapcom[isig]);
-+ memcpy((char*)&shp->st.trapcom[0],savsig,nsig*sizeof(char*));
- free((void*)savsig);
- }
- shp->options = sp->options;