Hello community,

here is the log from the commit of package ksh for openSUSE:Factory checked in 
at 2013-11-12 09:50:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ksh (Old)
 and      /work/SRC/openSUSE:Factory/.ksh.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ksh"

Changes:
--------
--- /work/SRC/openSUSE:Factory/ksh/ksh.changes  2013-11-07 12:53:05.000000000 
+0100
+++ /work/SRC/openSUSE:Factory/.ksh.new/ksh.changes     2013-11-12 
09:50:26.000000000 +0100
@@ -1,0 +2,6 @@
+Tue Oct 29 17:44:05 UTC 2013 - [email protected]
+
+- deliver %{_sysconfdir}/ksh.kshrc as a packaged symlink on
+  openSUSE >= 13.2
+
+-------------------------------------------------------------------

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ ksh.spec ++++++
--- /var/tmp/diff_new_pack.nVOVJk/_old  2013-11-12 09:50:27.000000000 +0100
+++ /var/tmp/diff_new_pack.nVOVJk/_new  2013-11-12 09:50:27.000000000 +0100
@@ -670,6 +670,9 @@
       ln -sf /%{_lib}/ast/$so %{buildroot}%{_libdir}/ast/${so%%%%.*}.so
   done
   rm -f %{buildroot}%{_libdir}/ast/*.so.*
+%if %suse_version >= 1320
+  ln -s %{_sysconfdir}/bash.bashrc %{buildroot}%{_sysconfdir}/ksh.kshrc
+%endif
   sed -rn '/^\.de Af/,/^\.\./p;/^\.de aF/,/^\.\./p' man/man3/int.3 > af.man
   for man in $(grep -l '\.}S' man/man[138]/*.[138]); do
       sed -ri '1r af.man' $man
@@ -754,7 +757,9 @@
 %endif
 
 %post
+%if %suse_version < 1320
 test -e etc/bash.bashrc && ln -sf bash.bashrc etc/ksh.kshrc || true
+%endif
 %if %use_suid_exe
 %if %{defined set_permissions}
 %set_permissions /%{_lib}/ast/bin/suid_exec
@@ -802,6 +807,7 @@
 %endif
 
 %postun
+%if %suse_version < 1320
 if test $1 -eq 0 -a ! -x bin/ksh ; then
     if test ! -x bin/pdksh ; then
        rm -f etc/ksh.kshrc
@@ -810,11 +816,14 @@
     rm -f bin/ksh %{_exec_prefix}/bin/ksh
 %endif
 fi
+%endif
 
 %posttrans
+%if %suse_version < 1320
 if test -x bin/ksh -o -x bin/pdksh ; then
     test -e etc/bash.bashrc && ln -sf bash.bashrc etc/ksh.kshrc || true
 fi
+%endif
 
 %files -f ksh.lang
 %defattr(-,root,root)
@@ -855,6 +864,9 @@
 %dir %{_datadir}/ksh
 %dir %{_datadir}/ksh/fun
 %{_datadir}/ksh/fun/*
+%if %suse_version >= 1320
+%{_sysconfdir}/ksh.kshrc
+%endif
 
 %files -n ksh-devel
 %defattr(-,root,root)

++++++ ksh93-dttree-crash.dif ++++++
--- /var/tmp/diff_new_pack.nVOVJk/_old  2013-11-12 09:50:27.000000000 +0100
+++ /var/tmp/diff_new_pack.nVOVJk/_new  2013-11-12 09:50:27.000000000 +0100
@@ -1,6 +1,388 @@
+--- src/cmd/ksh93/bltins/typeset.c
++++ src/cmd/ksh93/bltins/typeset.c     2013-10-25 13:20:42.799733785 +0000
+@@ -579,7 +579,7 @@ static int     setall(char **argv,regist
+                                               np = 
sh_fsearch(shp,name,NV_ADD|HASH_NOSCOPE);
+                                       else
+ #endif /* SHOPT_NAMESPACE */
+-                                      np = 
nv_open(name,sh_subfuntree(1),NV_NOARRAY|NV_IDENT|NV_NOSCOPE);
++                                      np = 
nv_open(name,sh_subfuntree(shp,1),NV_NOARRAY|NV_IDENT|NV_NOSCOPE);
+                               }
+                               else 
+                               {
+@@ -1168,14 +1168,14 @@ static int unall(int argc, char **argv,
+       {
+               name = sh_optunalias;
+               if(shp->subshell)
+-                      troot = sh_subaliastree(0);
++                      troot = sh_subaliastree(shp,0);
+       }
+       else
+               name = sh_optunset;
+       while(r = optget(argv,name)) switch(r)
+       {
+               case 'f':
+-                      troot = sh_subfuntree(1);
++                      troot = sh_subfuntree(shp,1);
+                       break;
+               case 'a':
+                       all=1;
+--- src/cmd/ksh93/include/defs.h
++++ src/cmd/ksh93/include/defs.h       2013-10-25 13:20:42.799733785 +0000
+@@ -423,10 +423,10 @@ extern void              sh_printopts(Shopt_t,int,Sh
+ extern int            sh_readline(Shell_t*,char**,volatile 
int,int,ssize_t,long);
+ extern Sfio_t         *sh_sfeval(char*[]);
+ extern void           sh_setmatch(Shell_t*,const char*,int,int,int[],int);
+-extern Dt_t           *sh_subaliastree(int);
++extern Dt_t           *sh_subaliastree(Shell_t*,int);
+ extern void             sh_scope(Shell_t*, struct argnod*, int);
+ extern Namval_t               *sh_scoped(Shell_t*, Namval_t*);
+-extern Dt_t           *sh_subfuntree(int);
++extern Dt_t           *sh_subfuntree(Shell_t*,int);
+ extern void           sh_subjobcheck(pid_t);
+ extern int            sh_subsavefd(int);
+ extern void           sh_subtmpfile(Shell_t*);
+--- src/cmd/ksh93/sh/arith.c
++++ src/cmd/ksh93/sh/arith.c   2013-10-25 13:20:42.799733785 +0000
+@@ -180,7 +180,10 @@ static Namval_t *scope(register Namval_t
+                       {
+                               ap = nv_arrayptr(np);
+                               if(ap && !ap->table)
++                              {
+                                       ap->table = dtopen(&_Nvdisc,Dtoset);
++                                      dtuserdata(ap->table,shp,1);
++                              }
+                               if(ap && ap->table && 
(nq=nv_search(nv_getsub(np),ap->table,NV_ADD)))
+                                       nq->nvenv = (char*)np;
+                               if(nq && nv_isnull(nq))
+--- src/cmd/ksh93/sh/array.c
++++ src/cmd/ksh93/sh/array.c   2013-10-25 13:20:42.800733693 +0000
+@@ -79,6 +79,7 @@ struct assoc_array
+ 
+ static Namarr_t *array_scope(Namval_t *np, Namarr_t *ap, int flags)
+ {
++      Shell_t *shp = sh_getinterp();
+       Namarr_t *aq;
+ #if SHOPT_FIXEDARRAY
+       struct fixed_array *fp;
+@@ -95,6 +96,7 @@ static Namarr_t *array_scope(Namval_t *n
+       if(is_associative(aq))
+       {
+               aq->scope = (void*)dtopen(&_Nvdisc,Dtoset);
++              dtuserdata(aq->scope,shp,1);
+               dtview((Dt_t*)aq->scope,aq->table);
+               aq->table = (Dt_t*)aq->scope;
+               return(aq);
+@@ -271,6 +273,7 @@ int nv_arrayisset(Namval_t *np, Namarr_t
+  */
+ static Namval_t *array_find(Namval_t *np,Namarr_t *arp, int flag)
+ {
++      Shell_t *shp=sh_getinterp();
+       register struct index_array *ap = (struct index_array*)arp;
+       register union Value    *up;
+       Namval_t                *mp;
+@@ -373,7 +376,10 @@ static Namval_t *array_find(Namval_t *np
+               {
+                       char *cp;
+                       if(!ap->header.table)
++                      {
+                               ap->header.table = dtopen(&_Nvdisc,Dtoset);
++                              dtuserdata(ap->header.table,shp,1);
++                      }
+                       sfprintf(sh.strbuf,"%d",ap->cur);
+                       cp = sfstruse(sh.strbuf);
+                       mp = nv_search(cp, ap->header.table, NV_ADD);
+@@ -402,6 +408,7 @@ static Namval_t *array_find(Namval_t *np
+ #if SHOPT_TYPEDEF
+ int nv_arraysettype(Namval_t *np, Namval_t *tp, const char *sub, int flags)
+ {
++      Shell_t         *shp = sh_getinterp();
+       Namval_t        *nq;
+       char            *av[2];
+       int             rdonly = nv_isattr(np,NV_RDONLY);
+@@ -410,7 +417,10 @@ int nv_arraysettype(Namval_t *np, Namval
+       av[1] = 0;
+       sh.last_table = 0;
+       if(!ap->table)
++      {
+               ap->table = dtopen(&_Nvdisc,Dtoset);
++              dtuserdata(ap->table,shp,1);
++      }
+       if(nq = nv_search(sub, ap->table, NV_ADD))
+       {
+               if(!nq->nvfun && nq->nvalue.cp && *nq->nvalue.cp==0)
+@@ -485,6 +495,7 @@ static Namfun_t *array_clone(Namval_t *n
+       if(ap->table)
+       {
+               ap->table = dtopen(&_Nvdisc,Dtoset);
++              dtuserdata(ap->table,shp,1);
+               if(ap->scope && !(flags&NV_COMVAR))
+               {
+                       ap->scope = ap->table;
+@@ -854,7 +865,9 @@ static struct index_array *array_grow(Na
+                       np->nvalue.cp=0;
+               if(nv_hasdisc(np,&array_disc) || (nv_type(np) && 
nv_isvtree(np)))
+               {
++                      Shell_t *shp = sh_getinterp();
+                       ap->header.table = dtopen(&_Nvdisc,Dtoset);
++                      dtuserdata(ap->header.table,shp,1);
+                       mp = nv_search("0", ap->header.table,NV_ADD);
+                       if(mp && nv_isnull(mp))
+                       {
+@@ -1169,6 +1182,7 @@ int nv_nextsub(Namval_t *np)
+  */
+ Namval_t *nv_putsub(Namval_t *np,register char *sp,register long mode)
+ {
++      Shell_t *shp = sh_getinterp();
+       register struct index_array *ap = (struct index_array*)nv_arrayptr(np);
+       register int size = (mode&ARRAY_MASK);
+ #if SHOPT_FIXEDARRAY
+@@ -1180,7 +1194,6 @@ Namval_t *nv_putsub(Namval_t *np,registe
+       {
+               if(sp)
+               {
+-                      Shell_t *shp = sh_getinterp();
+                       if(ap && ap->xp && !strmatch(sp,"+([0-9])"))
+                       {
+                               Namval_t *mp = nv_namptr(ap->xp,0);
+@@ -1258,7 +1271,10 @@ Namval_t *nv_putsub(Namval_t *np,registe
+                                       char *cp;
+                                       Namval_t *mp;
+                                       if(!ap->header.table)
++                                      {
+                                               ap->header.table = 
dtopen(&_Nvdisc,Dtoset);
++                                              
dtuserdata(ap->header.table,shp,1);
++                                      }
+                                       sfprintf(sh.strbuf,"%d",ap->cur);
+                                       cp = sfstruse(sh.strbuf);
+                                       mp = nv_search(cp, ap->header.table, 
NV_ADD);
+@@ -1666,6 +1682,7 @@ int nv_aimax(register Namval_t* np)
+  */
+ void *nv_associative(register Namval_t *np,const char *sp,int mode)
+ {
++      Shell_t *shp = sh_getinterp();
+       register struct assoc_array *ap = (struct assoc_array*)nv_arrayptr(np);
+       register int type;
+       switch(mode)
+@@ -1674,6 +1691,7 @@ void *nv_associative(register Namval_t *
+               if(ap = (struct assoc_array*)calloc(1,sizeof(struct 
assoc_array)))
+               {
+                       ap->header.table = dtopen(&_Nvdisc,Dtoset);
++                      dtuserdata(ap->header.table,shp,1);
+                       ap->cur = 0;
+                       ap->pos = 0;
+                       ap->header.hdr.disc = &array_disc;
+@@ -1742,7 +1760,6 @@ void *nv_associative(register Namval_t *
+           case NV_ANAME:
+               if(ap->cur)
+               {
+-                      Shell_t *shp = sh_getinterp();
+                       if(!shp->instance && nv_isnull(ap->cur))
+                               return(NIL(void*));
+                       return((void*)ap->cur->nvname);
+--- src/cmd/ksh93/sh/init.c
++++ src/cmd/ksh93/sh/init.c    2013-10-25 13:20:42.800733693 +0000
+@@ -1909,9 +1909,13 @@ static Init_t *nv_init(Shell_t *shp)
+       (OPTINDNOD)->nvalue.lp = (&shp->st.optindex);
+       /* set up the seconds clock */
+       shp->alias_tree = inittree(shp,shtab_aliases);
++      dtuserdata(shp->alias_tree,shp,1);
+       shp->track_tree = dtopen(&_Nvdisc,Dtset);
++      dtuserdata(shp->track_tree,shp,1);
+       shp->bltin_tree = inittree(shp,(const struct shtable2*)shtab_builtins);
++      dtuserdata(shp->bltin_tree,shp,1);
+       shp->fun_tree = dtopen(&_Nvdisc,Dtoset);
++      dtuserdata(shp->fun_tree,shp,1);
+       dtview(shp->fun_tree,shp->bltin_tree);
+       nv_mount(DOTSHNOD, "type", shp->typedict=dtopen(&_Nvdisc,Dtoset));
+       nv_adddisc(DOTSHNOD, shdiscnames, (Namval_t**)0);
+@@ -1954,6 +1958,7 @@ static Dt_t *inittree(Shell_t *shp,const
+               nbltins = n;
+       }
+       base_treep = treep = dtopen(&_Nvdisc,Dtoset);
++      dtuserdata(treep,shp,1);
+       treep->user = (void*)shp;
+       for(tp=name_vals;*tp->sh_name;tp++,np++)
+       {
+--- src/cmd/ksh93/sh/macro.c
++++ src/cmd/ksh93/sh/macro.c   2013-10-25 13:20:42.801733601 +0000
+@@ -2742,7 +2742,10 @@ static char *sh_tilde(Shell_t *shp,regis
+ skip:
+ #endif /* _WINIX */
+       if(!logins_tree)
++      {
+               logins_tree = dtopen(&_Nvdisc,Dtbag);
++              dtuserdata(logins_tree,shp,1);
++      }
+       if(np=nv_search(string,logins_tree,NV_ADD))
+       {
+               c = shp->subshell;
+--- src/cmd/ksh93/sh/name.c
++++ src/cmd/ksh93/sh/name.c    2013-10-25 13:20:42.802733508 +0000
+@@ -821,6 +821,7 @@ Namval_t *nv_create(const char *name,  D
+                               {
+                                       Dt_t *dp = 
dtview(shp->var_tree,(Dt_t*)0);
+                                       rp->sdict = dtopen(&_Nvdisc,Dtoset);
++                                      dtuserdata(rp->sdict,shp,1);
+                                       dtview(rp->sdict,dp);
+                                       dtview(shp->var_tree,rp->sdict);
+                               }
+@@ -1170,7 +1171,10 @@ Namval_t *nv_create(const char *name,  D
+                                                               ap = 
nv_arrayptr(np);
+                                                       }
+                                                       if(n && ap && 
!ap->table)
++                                                      {
+                                                               ap->table = 
dtopen(&_Nvdisc,Dtoset);
++                                                              
dtuserdata(ap->table,shp,1);
++                                                      }
+                                                       if(ap && ap->table && 
(nq=nv_search(sub,ap->table,n)))
+                                                               nq->nvenv = 
(char*)np;
+                                                       if(nq && nv_isnull(nq))
+@@ -1391,7 +1395,7 @@ Namval_t *nv_open(const char *name, Dt_t
+               while((c= *(unsigned char*)cp++) && (c!='=') && (c!='/') &&
+                       (c>=0x200 || !(c=sh_lexstates[ST_NORM][c]) || c==S_EPAT 
|| c==S_COLON));
+               if(shp->subshell && c=='=')
+-                      root = sh_subaliastree(1);
++                      root = sh_subaliastree(shp,1);
+               if(c= *--cp)
+                       *cp = 0;
+               np = nv_search(name, root, (flags&NV_NOADD)?0:NV_ADD); 
+@@ -2350,6 +2354,7 @@ void sh_scope(Shell_t *shp, struct argno
+               newroot = nv_dict(shp->namespace);
+ #endif /* SHOPT_NAMESPACE */
+       newscope = dtopen(&_Nvdisc,Dtoset);
++      dtuserdata(newscope,shp,1);
+       if(envlist)
+       {
+               dtview(newscope,(Dt_t*)shp->var_tree);
+@@ -3334,7 +3339,10 @@ int nv_rename(register Namval_t *np, int
+               if(ap=nv_arrayptr(np))
+               {
+                       if(!ap->table)
++                      {
+                               ap->table = dtopen(&_Nvdisc,Dtoset);
++                              dtuserdata(ap->table,shp,1);
++                      }
+                       if(ap->table)
+                               mp = nv_search(nv_getsub(np),ap->table,NV_ADD);
+                       nv_arraychild(np,mp,0);
+--- src/cmd/ksh93/sh/nvdisc.c
++++ src/cmd/ksh93/sh/nvdisc.c  2013-10-25 13:20:42.802733508 +0000
+@@ -246,6 +246,7 @@ static void chktfree(register Namval_t *
+  */
+ static void   assign(Namval_t *np,const char* val,int flags,Namfun_t *handle)
+ {
++      Shell_t         *shp = sh_getinterp();
+       int             type = (flags&NV_APPEND)?APPEND:ASSIGN;
+       register        struct vardisc *vp = (struct vardisc*)handle;
+       register        Namval_t *nq =  vp->disc[type];
+@@ -330,7 +331,7 @@ static void        assign(Namval_t *np,const ch
+       }
+       else if(!nq || !isblocked(bp,type))
+       {
+-              Dt_t *root = sh_subfuntree(1);
++              Dt_t *root = sh_subfuntree(shp,1);
+               int n;
+               Namarr_t *ap;
+               block(bp,type);
+@@ -1296,6 +1297,7 @@ static Namfun_t *clone_table(Namval_t* n
+       Dt_t            *oroot=tp->dict,*nroot=dtopen(&_Nvdisc,Dtoset);
+       if(!nroot)
+               return(0);
++      dtuserdata(nroot,dtuserdata(oroot,0,0),1);
+       memcpy((void*)ntp,(void*)fp,sizeof(struct table));
+       ntp->dict = nroot;
+       ntp->parent = nv_lastdict();
+@@ -1493,6 +1495,6 @@ Namval_t *sh_fsearch(Shell_t *shp, const
+       sfputr(stkp,nv_name(shp->namespace),'.');
+       sfputr(stkp,fname,0);
+       fname = stkptr(stkp,offset);
+-      return(nv_search(fname,sh_subfuntree(add&NV_ADD),add));
++      return(nv_search(fname,sh_subfuntree(shp,add&NV_ADD),add));
+ }
+ #endif /* SHOPT_NAMESPACE */
+--- src/cmd/ksh93/sh/path.c
++++ src/cmd/ksh93/sh/path.c    2013-10-25 13:20:42.803733416 +0000
+@@ -592,7 +592,7 @@ static void funload(Shell_t *shp,int fno
+       pname = path_fullname(shp,stakptr(PATH_OFFSET));
+       if(shp->fpathdict && (rp = dtmatch(shp->fpathdict,(void*)pname)))
+       {
+-              Dt_t    *funtree = sh_subfuntree(1);
++              Dt_t    *funtree = sh_subfuntree(shp,1);
+               while(1)
+               {
+                       rpfirst = dtprev(shp->fpathdict,rp);
+@@ -868,13 +868,13 @@ Pathcomp_t *path_absolute(Shell_t *shp,r
+               if(isfun && f>=0 && (cp = strrchr(name,'.')))
+               {
+                       *cp = 0;
+-                      
if(nv_open(name,sh_subfuntree(1),NV_NOARRAY|NV_IDENT|NV_NOSCOPE))
++                      
if(nv_open(name,sh_subfuntree(shp,1),NV_NOARRAY|NV_IDENT|NV_NOSCOPE))
+                               f = -1;
+                       *cp = '.';
+               }
+               if(isfun && f>=0)
+               {
+-                      
nv_onattr(nv_open(name,sh_subfuntree(1),NV_NOARRAY|NV_IDENT|NV_NOSCOPE),NV_LTOU|NV_FUNCTION);
++                      
nv_onattr(nv_open(name,sh_subfuntree(shp,1),NV_NOARRAY|NV_IDENT|NV_NOSCOPE),NV_LTOU|NV_FUNCTION);
+                       funload(shp,f,name);
+                       close(f);
+                       f = -1;
+--- src/cmd/ksh93/sh/subshell.c
++++ src/cmd/ksh93/sh/subshell.c        2013-10-25 13:20:42.803733416 +0000
+@@ -379,7 +379,7 @@ static void nv_restore(struct subshell *
+  * return pointer to alias tree
+  * create new one if in a subshell and one doesn't exist and create is 
non-zero
+  */
+-Dt_t *sh_subaliastree(int create)
++Dt_t *sh_subaliastree(Shell_t *shp,int create)
+ {
+       register struct subshell *sp = subshell_data;
+       if(!sp || sp->shp->curenv==0)
+@@ -387,6 +387,7 @@ Dt_t *sh_subaliastree(int create)
+       if(!sp->salias && create)
+       {
+               sp->salias = dtopen(&_Nvdisc,Dtoset);
++              dtuserdata(sp->salias,shp,1);
+               dtview(sp->salias,sp->shp->alias_tree);
+               sp->shp->alias_tree = sp->salias;
+       }
+@@ -397,7 +398,7 @@ Dt_t *sh_subaliastree(int create)
+  * return pointer to function tree
+  * create new one if in a subshell and one doesn't exist and create is 
non-zero
+  */
+-Dt_t *sh_subfuntree(int create)
++Dt_t *sh_subfuntree(Shell_t *shp,int create)
+ {
+       register struct subshell *sp = subshell_data;
+       if(!sp || sp->shp->curenv==0)
+@@ -405,6 +406,7 @@ Dt_t *sh_subfuntree(int create)
+       if(!sp->sfun && create)
+       {
+               sp->sfun = dtopen(&_Nvdisc,Dtoset);
++              dtuserdata(sp->sfun,shp,1);
+               dtview(sp->sfun,sp->shp->fun_tree);
+               sp->shp->fun_tree = sp->sfun;
+       }
 --- src/cmd/ksh93/sh/xec.c
-+++ src/cmd/ksh93/sh/xec.c     2013-02-01 16:22:50.000000000 +0000
-@@ -2741,11 +2741,6 @@ int sh_exec(register const Shnode_t *t,
++++ src/cmd/ksh93/sh/xec.c     2013-10-25 13:20:42.804733324 +0000
+@@ -2688,6 +2688,7 @@ int sh_exec(register const Shnode_t *t,
+                               else
+                               {
+                                       root = dtopen(&_Nvdisc,Dtoset);
++                                      dtuserdata(root,shp,1);
+                                       nv_mount(np, (char*)0, root);
+                                       np->nvalue.cp = Empty;
+                                       dtview(root,shp->var_base);
+@@ -2729,7 +2730,7 @@ int sh_exec(register const Shnode_t *t,
+                               np = sh_fsearch(shp,fname,NV_ADD|HASH_NOSCOPE);
+                       if(!np)
+ #endif /* SHOPT_NAMESPACE */
+-                      np = 
nv_open(fname,sh_subfuntree(1),NV_NOASSIGN|NV_NOARRAY|NV_VARNAME|NV_NOSCOPE);
++                      np = 
nv_open(fname,sh_subfuntree(shp,1),NV_NOASSIGN|NV_NOARRAY|NV_VARNAME|NV_NOSCOPE);
+                       if(npv)
+                       {
+                               if(!shp->mktype)
+@@ -2743,11 +2744,6 @@ int sh_exec(register const Shnode_t *t,
                                slp = (struct slnod*)np->nvenv;
                                sh_funstaks(slp->slchild,-1);
                                stakdelete(slp->slptr);
@@ -12,7 +394,7 @@
                                if(rp->sdict)
                                {
                                        Namval_t *mp, *nq;
-@@ -2759,6 +2754,12 @@ int sh_exec(register const Shnode_t *t,
+@@ -2761,6 +2757,12 @@ int sh_exec(register const Shnode_t *t,
                                        dtclose(rp->sdict);
                                        rp->sdict = 0;
                                }
@@ -25,29 +407,19 @@
                        }
                        if(!np->nvalue.rp)
                        {
-@@ -2769,7 +2770,7 @@ int sh_exec(register const Shnode_t *t,
-                       {
-                               static Dtdisc_t         _Rpdisc =
-                               {
--                                      offsetof(struct Ufunction,fname), -1, 
sizeof(struct Ufunction) 
-+                                      offsetof(struct Ufunction,fname), -1, 
sizeof(struct Ufunction)
-                               };
-                               struct functnod *fp;
-                               struct comnod *ac = t->funct.functargs;
-@@ -2796,8 +2797,10 @@ int sh_exec(register const Shnode_t *t,
-                                       rp->np = np;
+@@ -2799,7 +2801,10 @@ int sh_exec(register const Shnode_t *t,
                                        if(!shp->fpathdict)
                                                shp->fpathdict = 
dtopen(&_Rpdisc,Dtobag);
--                                      if(shp->fpathdict)
-+                                      if(shp->fpathdict) {
-+                                      /*      
dtuserdata(shp->fpathdict,shp,1); */
+                                       if(shp->fpathdict)
++                                      {
++                                              
dtuserdata(shp->fpathdict,shp,1);
                                                dtinsert(shp->fpathdict,rp);
 +                                      }
                                }
                        }
                        else
 --- src/lib/libast/Mamfile
-+++ src/lib/libast/Mamfile     2013-01-30 10:01:13.000000000 +0000
++++ src/lib/libast/Mamfile     2013-10-25 13:20:42.806733139 +0000
 @@ -3969,6 +3969,14 @@ meta dtopen.o %.c>%.o cdt/dtopen.c dtope
  prev cdt/dtopen.c
  exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Icdt -Icomp -Iinclude -Istd 
-I${INSTALLROOT}/include/ast -D_PACKAGE_ast -c cdt/dtopen.c
@@ -87,8 +459,30 @@
  exec - ${AR} rc libast.a _sfputu.o clearerr.o fclose.o fdopen.o feof.o 
ferror.o fflush.o fgetc.o fgetpos.o fgets.o fileno.o fopen.o fprintf.o fpurge.o 
fputc.o fputs.o fread.o freopen.o fscanf.o fseek.o fseeko.o fsetpos.o ftell.o 
ftello.o fwrite.o flockfile.o ftrylockfile.o funlockfile.o getc.o getchar.o 
getw.o pclose.o popen.o printf.o putc.o putchar.o puts.o putw.o rewind.o 
scanf.o setbuf.o setbuffer.o setlinebuf.o setvbuf.o snprintf.o sprintf.o 
sscanf.o asprintf.o vasprintf.o tmpfile.o ungetc.o vfprintf.o vfscanf.o 
vprintf.o vscanf.o vsnprintf.o vsprintf.o vsscanf.o _doprnt.o _doscan.o 
_filbuf.o _flsbuf.o _stdfun.o _stdopen.o _stdprintf.o _stdscanf.o _stdsprnt.o 
_stdvbuf.o _stdvsnprnt.o _stdvsprnt.o _stdvsscn.o fgetwc.o fwprintf.o 
putwchar.o vfwscanf.o wprintf.o fgetws.o fwscanf.o swprintf.o vswprintf.o 
wscanf.o fputwc.o getwc.o swscanf.o vswscanf.o fputws.o getwchar.o ungetwc.o 
vwprintf.o fwide.o putwc.o vfwprintf.o vwscanf.o stdio_c99.o fcloseall.o 
fmemopen.o getdelim.o getline.o frexp.o frexpl.o astcopy.o
  exec - ${AR} rc libast.a astconf.o astdynamic.o astlicense.o astquery.o 
astwinsize.o conftab.o aststatic.o getopt.o getoptl.o aso.o asolock.o asometh.o 
asorelax.o aso-sem.o aso-fcntl.o vmbest.o vmclear.o vmclose.o vmdcheap.o 
vmdebug.o vmdisc.o vmexit.o vmlast.o vmopen.o vmpool.o vmprivate.o vmprofile.o 
vmregion.o vmsegment.o vmset.o vmstat.o vmstrdup.o vmtrace.o vmwalk.o vmmopen.o 
malloc.o vmgetmem.o a64l.o acosh.o asinh.o atanh.o cbrt.o crypt.o erf.o err.o 
exp.o exp__E.o expm1.o gamma.o getpass.o lgamma.o log.o log1p.o log__L.o 
rand48.o random.o rcmd.o rint.o support.o sfstrtmp.o spawn.o
  exec - (ranlib libast.a) >/dev/null 2>&1 || true
+--- src/lib/libast/cdt/cdtlib.h
++++ src/lib/libast/cdt/cdtlib.h        2013-10-25 13:20:42.807733047 +0000
+@@ -58,9 +58,9 @@
+ /* This struct holds private method data created on DT_OPEN */
+ struct _dtdata_s
+ {     unsigned int    lock;   /* general dictionary lock      */
+-      Dtuser_t        user;   /* application's data           */
+       unsigned int    type;   /* method type, control flags   */
+       ssize_t         size;   /* number of objects            */
++      Dtuser_t        user;   /* application's data           */
+       Dt_t            dict;   /* when DT_INDATA is requested  */
+ };
+ 
+@@ -123,7 +123,7 @@ typedef struct _dtlib_s
+ #endif /* _BLD_cdt */
+ 
+ /* these macros lock/unlock dictionaries. DTRETURN substitutes for "return" */
+-#define DTSETLOCK(dt)         (((dt)->data->type&DT_SHARE) ? 
asolock(&(dt)->data->lock,1,ASO_SPINLOCK) : 0 )
++#define DTSETLOCK(dt)         (((dt)->data->type&DT_SHARE) ? 
asolock(&(dt)->data->lock,1,ASO_LOCK) : 0 )
+ #define DTCLRLOCK(dt)         (((dt)->data->type&DT_SHARE) ? 
asolock(&(dt)->data->lock,1,ASO_UNLOCK) : 0 )
+ #define DTRETURN(ob,rv)               do { (ob) = (rv); goto dt_return; } 
while(0)
+ #define DTERROR(dt, mesg)     (!((dt)->disc && (dt)->disc->eventf) ? 0 : \
 --- src/lib/libast/cdt/dtcomp.c
-+++ src/lib/libast/cdt/dtcomp.c        2012-12-20 10:29:45.000000000 +0000
++++ src/lib/libast/cdt/dtcomp.c        2013-10-25 13:20:42.807733047 +0000
 @@ -52,9 +52,3 @@ extern ssize_t dtsize(Dt_t* d)
  {
        return (ssize_t)(*(_DT(d)->searchf))((d),(Void_t*)(0),DT_STAT);
@@ -100,7 +494,7 @@
 -      return (ssize_t)(*(_DT(d)->searchf))((d),(Void_t*)(0),DT_STAT);
 -}
 --- src/lib/libast/cdt/dthash.c
-+++ src/lib/libast/cdt/dthash.c        2012-12-20 10:29:45.000000000 +0000
++++ src/lib/libast/cdt/dthash.c        2013-10-25 13:20:42.807733047 +0000
 @@ -52,11 +52,13 @@ static int htable(Dt_t* dt)
        if((n = hash->tblz) > 0 && (hash->type&H_FIXED) )
                return 0; /* fixed size table */
@@ -190,7 +584,7 @@
  
        do_insert: /* inserting a new object */
 --- src/lib/libast/cdt/dtlist.c
-+++ src/lib/libast/cdt/dtlist.c        2012-12-20 10:29:45.000000000 +0000
++++ src/lib/libast/cdt/dtlist.c        2013-10-25 13:20:42.807733047 +0000
 @@ -142,9 +142,9 @@ int                type;
  }
  
@@ -234,7 +628,7 @@
  
        if(type&(DT_DELETE|DT_DETACH|DT_REMOVE))
 --- src/lib/libast/cdt/dtopen.c
-+++ src/lib/libast/cdt/dtopen.c        2012-12-20 10:29:45.000000000 +0000
++++ src/lib/libast/cdt/dtopen.c        2013-10-25 13:20:42.808732955 +0000
 @@ -153,25 +153,3 @@ void _dtfree(Dt_t* dt, Dtlink_t* l, int
        if(disc->link < 0) /* free holder */
                (void)(*dt->memoryf)(dt, (Void_t*)l, 0, disc);
@@ -262,7 +656,7 @@
 -      }
 -}
 --- src/lib/libast/cdt/dtstat.c
-+++ src/lib/libast/cdt/dtstat.c        2012-12-20 10:29:45.000000000 +0000
++++ src/lib/libast/cdt/dtstat.c        2013-10-25 13:20:42.808732955 +0000
 @@ -0,0 +1,54 @@
 +/***********************************************************************
 +*                                                                      *
@@ -319,7 +713,7 @@
 +      return sz;
 +}
 --- src/lib/libast/cdt/dtstrhash.c
-+++ src/lib/libast/cdt/dtstrhash.c     2012-12-20 10:29:45.000000000 +0000
++++ src/lib/libast/cdt/dtstrhash.c     2013-10-25 13:20:42.808732955 +0000
 @@ -22,40 +22,38 @@
  #include      "dthdr.h"
  
@@ -380,7 +774,7 @@
 +      return h;
  }
 --- src/lib/libast/cdt/dttree.c
-+++ src/lib/libast/cdt/dttree.c        2012-12-20 10:29:45.000000000 +0000
++++ src/lib/libast/cdt/dttree.c        2013-10-25 13:20:42.808732955 +0000
 @@ -545,7 +545,14 @@ int               type;
                        }
                        else    goto no_root;
@@ -449,7 +843,7 @@
                        if(!(root = _dtmake(dt, obj, type)) )
                        {       obj = NIL(Void_t*);
 --- src/lib/libast/cdt/dtuser.c
-+++ src/lib/libast/cdt/dtuser.c        2012-12-20 10:29:45.000000000 +0000
++++ src/lib/libast/cdt/dtuser.c        2013-10-25 13:20:42.808732955 +0000
 @@ -0,0 +1,59 @@
 +/***********************************************************************
 +*                                                                      *
@@ -511,7 +905,7 @@
 +      else    return (*dt->disc->eventf)(dt, DT_ANNOUNCE|DT_USER|flags, data, 
dt->disc);
 +}
 --- src/lib/libast/include/cdt.h
-+++ src/lib/libast/include/cdt.h       2012-12-20 10:29:45.000000000 +0000
++++ src/lib/libast/include/cdt.h       2013-10-25 13:20:42.809732863 +0000
 @@ -164,6 +164,7 @@ struct _dtstat_s
        ssize_t         msize;  /* max #defined elts in below arrays    */
        ssize_t         lsize[DT_MAXSIZE]; /* #objects by level         */

++++++ ksh93-fdstatus.dif ++++++
--- /var/tmp/diff_new_pack.nVOVJk/_old  2013-11-12 09:50:27.000000000 +0100
+++ /var/tmp/diff_new_pack.nVOVJk/_new  2013-11-12 09:50:27.000000000 +0100
@@ -266,14 +266,6 @@
        free(shp->fifo);
 --- src/cmd/ksh93/sh/array.c
 +++ src/cmd/ksh93/sh/array.c   2013-10-25 13:26:45.742247936 +0000
-@@ -402,6 +408,7 @@ static Namval_t *array_find(Namval_t *np
- #if SHOPT_TYPEDEF
- int nv_arraysettype(Namval_t *np, Namval_t *tp, const char *sub, int flags)
- {
-+      Shell_t         *shp = sh_getinterp();
-       Namval_t        *nq;
-       char            *av[2];
-       int             rdonly = nv_isattr(np,NV_RDONLY);
 @@ -438,10 +438,13 @@ int nv_arraysettype(Namval_t *np, Namval
                        nv_offattr(nq,NV_RDONLY);
                if(!nv_isattr(tp,NV_BINARY))
@@ -1016,7 +1008,7 @@
        sh_onstate(SH_NOLOG);
 @@ -876,7 +878,7 @@ Pathcomp_t *path_absolute(Shell_t *shp,r
                {
-                       
nv_onattr(nv_open(name,sh_subfuntree(1),NV_NOARRAY|NV_IDENT|NV_NOSCOPE),NV_LTOU|NV_FUNCTION);
+                       
nv_onattr(nv_open(name,sh_subfuntree(shp,1),NV_NOARRAY|NV_IDENT|NV_NOSCOPE),NV_LTOU|NV_FUNCTION);
                        funload(shp,f,name);
 -                      close(f);
 +                      sh_close(f);
@@ -1533,7 +1525,16 @@
                                dup(savein);
                                shp->cur_line = 0;
                        }
-@@ -2910,6 +2946,15 @@ int sh_exec(register const Shnode_t *t,
+@@ -2746,7 +2782,7 @@ int sh_exec(register const Shnode_t *t,
+                               stakdelete(slp->slptr);
+                               if(rp->sdict)
+                               {
+-                                      Namval_t *mp, *nq;
++                                      Namval_t *nq;
+                                       shp->last_root = rp->sdict;
+                                       
for(mp=(Namval_t*)dtfirst(rp->sdict);mp;mp=nq)
+                                       {
+@@ -2911,6 +2947,15 @@ int sh_exec(register const Shnode_t *t,
                        break;
                    }
                }
@@ -1549,7 +1550,7 @@
                if(shp->trapnote || (shp->exitval && sh_isstate(SH_ERREXIT)) &&
                        t && echeck) 
                        sh_chktrap(shp);
-@@ -3166,7 +3211,7 @@ pid_t _sh_fork(Shell_t *shp,register pid
+@@ -3167,7 +3212,7 @@ pid_t _sh_fork(Shell_t *shp,register pid
                        {
                                if(shp->topfd > restorefd)
                                        sh_iorestore(shp,restorefd,0);
@@ -1558,7 +1559,7 @@
                        }
                }
                return(parent);
-@@ -3478,8 +3523,7 @@ static void sh_funct(Shell_t *shp,Namval
+@@ -3479,8 +3524,7 @@ static void sh_funct(Shell_t *shp,Namval
        struct funenv fun;
        char *fname = nv_getval(SH_FUNNAMENOD);
        struct Level    *lp =(struct Level*)(SH_LEVELNOD->nvfun);
@@ -1568,7 +1569,7 @@
        shp->pipepid = 0;
        sh_stats(STAT_FUNCT);
        if(!lp->hdr.disc)
-@@ -3522,7 +3566,6 @@ static void sh_funct(Shell_t *shp,Namval
+@@ -3523,7 +3567,6 @@ static void sh_funct(Shell_t *shp,Namval
        lp->maxlevel = level;
        SH_LEVELNOD->nvalue.s = lp->maxlevel;
        shp->last_root = nv_dict(DOTSHNOD);
@@ -1576,7 +1577,7 @@
  #if 0
        nv_putval(SH_FUNNAMENOD,shp->st.funname,NV_NOFREE);
  #else
-@@ -3627,11 +3670,11 @@ static void coproc_init(Shell_t *shp, in
+@@ -3628,11 +3671,11 @@ static void coproc_init(Shell_t *shp, in
                sh_pipe(shp->cpipe);
                if((outfd=shp->cpipe[1]) < 10) 
                {
@@ -1590,7 +1591,7 @@
                                shp->fdstatus[outfd] = IOCLOSE;
                                shp->cpipe[1] = fd;
                        }
-@@ -3720,7 +3763,7 @@ static int run_subshell(Shell_t *shp,con
+@@ -3721,7 +3764,7 @@ static int run_subshell(Shell_t *shp,con
        if(!shp->gd->shpath)
                shp->gd->shpath = pathshell();
        pid = spawnveg(shp->shpath,arglist,envlist,grp);
@@ -1599,7 +1600,7 @@
        for(i=3; i < 10; i++)
        {
                if(shp->fdstatus[i]&IOCLEX && i!=pin && i!=pout)
-@@ -4001,7 +4044,7 @@ static pid_t sh_ntfork(Shell_t *shp,cons
+@@ -4002,7 +4045,7 @@ static pid_t sh_ntfork(Shell_t *shp,cons
                                shp->gd->shpath = pathshell();
                        spawnpid = 
path_spawn(shp,shp->gd->shpath,&argv[-1],arge,pp,(grp<<1)|1);
                        if(fd>=0)

--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to