24 lines
905 B
Diff
24 lines
905 B
Diff
|
diff -up ksh-20110630/src/cmd/ksh93/sh/subshell.c.ifsfix ksh-20110630/src/cmd/ksh93/sh/subshell.c
|
||
|
--- ksh-20110630/src/cmd/ksh93/sh/subshell.c.ifsfix 2011-06-09 15:16:19.000000000 +0200
|
||
|
+++ ksh-20110630/src/cmd/ksh93/sh/subshell.c 2011-08-03 07:58:55.749400810 +0200
|
||
|
@@ -304,7 +304,7 @@ static void nv_restore(struct subshell *
|
||
|
register Namval_t *mp, *np;
|
||
|
const char *save = sp->shpwd;
|
||
|
Namval_t *mpnext;
|
||
|
- int flags;
|
||
|
+ int flags,nofree;
|
||
|
sp->shpwd = 0; /* make sure sh_assignok doesn't save with nv_unset() */
|
||
|
for(lp=sp->svar; lp; lp=lq)
|
||
|
{
|
||
|
@@ -327,7 +327,9 @@ static void nv_restore(struct subshell *
|
||
|
nv_setsize(mp,nv_size(np));
|
||
|
if(!(flags&NV_MINIMAL))
|
||
|
mp->nvenv = np->nvenv;
|
||
|
- mp->nvfun = np->nvfun;
|
||
|
+ nofree = mp->nvfun?mp->nvfun->nofree:0;
|
||
|
+ if((mp->nvfun = np->nvfun) && nofree)
|
||
|
+ mp->nvfun->nofree = nofree;
|
||
|
if(nv_isattr(np,NV_IDENT))
|
||
|
{
|
||
|
nv_offattr(np,NV_IDENT);
|