File ksh93-ifs.dif of Package ksh

---
 src/cmd/ksh93/sh/init.c |   14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

--- src/cmd/ksh93/sh/init.c
+++ src/cmd/ksh93/sh/init.c	2010-10-08 12:43:27.123926224 +0000
@@ -456,6 +456,8 @@ static void put_cdpath(register Namval_t
     }
 #endif /* _hdr_locale */
 
+static const void* ifs_hdr;
+
 /* Trap for IFS assignment and invalidates state table */
 static void put_ifs(register Namval_t* np,const char *val,int flags,Namfun_t *fp)
 {
@@ -464,9 +466,14 @@ static void put_ifs(register Namval_t* n
 	ip->ifsnp = 0;
 	if(!val)
 	{
-		fp = nv_stack(np, NIL(Namfun_t*));
-		if(fp && !fp->nofree)
-			free((void*)fp);
+		Namfun_t *xp = nv_stack(np, NIL(Namfun_t*));
+		if(xp)
+		{
+			if(xp == ifs_hdr)
+				xp->nofree = 1;
+			if(xp->nofree == 0)
+				free((void*)xp);
+		}
 	}
 	if(val != np->nvalue.cp)
 		nv_putv(np, val, flags, fp);
@@ -1597,6 +1604,7 @@ static Init_t *nv_init(Shell_t *shp)
 	ip->LANG_init.nofree = 1;
 #endif /* _hdr_locale */
 	nv_stack(IFSNOD, &ip->IFS_init.hdr);
+	ifs_hdr = (IFSNOD)->nvfun;
 	nv_stack(PATHNOD, &ip->PATH_init);
 	nv_stack(FPATHNOD, &ip->FPATH_init);
 	nv_stack(CDPNOD, &ip->CDPATH_init);
openSUSE Build Service is sponsored by