psss / rpms / ksh

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