|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
diff -up ksh-20120801/src/cmd/ksh93/sh/subshell.c.orig ksh-20120801/src/cmd/ksh93/sh/subshell.c
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
--- ksh-20120801/src/cmd/ksh93/sh/subshell.c.orig 2014-08-23 20:20:24.676186573 -0300
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
+++ ksh-20120801/src/cmd/ksh93/sh/subshell.c 2014-08-23 20:29:00.772151283 -0300
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
@@ -481,12 +481,12 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
{
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
struct subshell sub_data;
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
register struct subshell *sp = &sub_data;
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
- int jmpval,nsig=0,duped=0;
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
+ int jmpval,isig,nsig=0,duped=0;
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
long savecurenv = shp->curenv;
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
int savejobpgid = job.curpgid;
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
int *saveexitval = job.exitval;
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
int16_t subshell;
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
- char *savsig;
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
+ char **savsig;
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
Sfio_t *iop=0;
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
struct checkpt buff;
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
struct sh_scoped savst;
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
@@ -561,10 +561,13 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
/* save trap table */
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
shp->st.otrapcom = 0;
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
shp->st.otrap = savst.trap;
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
- if((nsig=shp->st.trapmax*sizeof(char*))>0 || shp->st.trapcom[0])
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
+ if((nsig=shp->st.trapmax)>0 || shp->st.trapcom[0])
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
{
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
- nsig += sizeof(char*);
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
- memcpy(savsig=malloc(nsig),(char*)&shp->st.trapcom[0],nsig);
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
+ ++nsig;
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
+ savsig = malloc(nsig * sizeof(char*));
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
+ /* contents of shp->st.st.trapcom may change */
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
+ for (isig = 0; isig < nsig; ++isig)
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
+ savsig[isig] = shp->st.trapcom[isig] ? strdup(shp->st.trapcom[isig]) : NULL;
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
/* this nonsense needed for $(trap) */
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
shp->st.otrapcom = (char**)savsig;
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
}
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
@@ -729,7 +732,10 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
shp->st.otrap = 0;
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
if(nsig)
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
{
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
- memcpy((char*)&shp->st.trapcom[0],savsig,nsig);
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
+ for (isig = 0; isig < nsig; ++isig)
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
+ if (shp->st.trapcom[isig])
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
+ free(shp->st.trapcom[isig]);
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
+ memcpy((char*)&shp->st.trapcom[0],savsig,nsig*sizeof(char*));
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
free((void*)savsig);
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
}
|
|
![](https://seccdn.libravatar.org/avatar/61a12734645841e91723eabc6bd107c284a53a31f5e482f6ca304be5cbc5209c?s=16&d=retro) |
3b3638b |
shp->options = sp->options;
|