Hello community,

here is the log from the commit of package ksh for openSUSE:Factory
checked in at Fri Jun 17 15:26:20 CEST 2011.



--------
--- ksh/ksh.changes     2011-06-01 11:33:24.000000000 +0200
+++ /mounts/work_src_done/STABLE/ksh/ksh.changes        2011-06-17 
12:32:42.000000000 +0200
@@ -1,0 +2,18 @@
+Tue Jun 14 11:36:28 UTC 2011 - [email protected]
+
+- Fix off by one error which should make timetype.sh work now
+- Update the array fix as well as the pipe fix
+- This also fixes bnc#677790
+
+-------------------------------------------------------------------
+Fri Jun 10 19:11:07 CEST 2011 - [email protected]
+
+- Avoid redirection in subshell if an eval was used (bnc#697394)
+
+-------------------------------------------------------------------
+Wed Jun  8 15:14:46 CEST 2011 - [email protected]
+
+- Extend Shift.JIS patch to avoid breakage of the parsers above
+- Avoid mounting 3D file system as this does not exist on linux
+
+-------------------------------------------------------------------

calling whatdependson for head-i586


New:
----
  ksh93-argv.dif
  ksh93-pipe.dif

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

Other differences:
------------------
++++++ ksh.spec ++++++
--- /var/tmp/diff_new_pack.B6V6VG/_old  2011-06-17 15:24:36.000000000 +0200
+++ /var/tmp/diff_new_pack.B6V6VG/_new  2011-06-17 15:24:36.000000000 +0200
@@ -37,7 +37,7 @@
 %endif
 AutoReqProv:    on
 Version:        93t
-Release:        196
+Release:        198
 Summary:        Korn Shell
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 Source:         INIT.2010-06-21.tar.bz2
@@ -75,6 +75,8 @@
 Patch21:        ksh93-export.dif
 Patch22:        ksh93-eintr.dif
 Patch23:        ksh93-array.dif
+Patch24:        ksh93-pipe.dif
+Patch25:        ksh93-argv.dif
 %global         use_suid_exe 0
 %global         use_locale 1
 %global         debug_memleak 0
@@ -149,11 +151,11 @@
 %patch21
 %patch22
 %patch23
+%patch24
+%patch25
 
 %build
   TMPDIR=$(mktemp -d /tmp/ksh-build.XXXXXX) || exit 1
-  mkdir ${TMPDIR}/bin || exit 1
-  PATH=${TMPDIR}/bin:$PATH
   typeset -i IGNORED=0x$(ps --no-headers -o ignored $$)
   typeset -i SIGPIPE=0x1000
   if ((IGNORED & SIGPIPE)) ; then
@@ -243,6 +245,7 @@
   feature=${TMPDIR:-/tmp}/feature.h
   set -C
   (cat > $feature)<<-'EOF'
+       #define SHOPT_FS_3D         0
        #define SHOPT_SYSRC         1
        #define SHOPT_REMOTE        1
        #define SHOPT_CMDLIB_BLTIN  1
@@ -257,32 +260,40 @@
   cat $feature
   #
   #
-  echo 'int main () { return !(sizeof(void*) >= 8); }' | $CC -x c -o test64 -
-  if ./test64 ; then
-      LARGEFILE=""
-  else
-      LARGEFILE="-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64"
-  fi
-  rm -f ./test64
-  case "$RPM_ARCH" in
-  ia64)  RPM_OPT_FLAGS="${RPM_OPT_FLAGS//-O[s0-9]/-O}" ;;
-  s390*) RPM_OPT_FLAGS="${RPM_OPT_FLAGS//-O[s0-9]/-O}" ;;
-  ppc*|powerpc*)
-        RPM_OPT_FLAGS="${RPM_OPT_FLAGS//-O[s0-9]/-O}" ;;
-  esac
+  LARGEFILE="$(getconf LFS_CFLAGS)"
   case "$RPM_ARCH" in
+  i[3456]86)
+        RPM_OPT_FLAGS="${RPM_OPT_FLAGS//-O[s0-9]/-O2} -m32"
+        HOSTTYPE=linux.i386
+        ;;
+  x86_64)
+        RPM_OPT_FLAGS="${RPM_OPT_FLAGS//-O[s0-9]/-O2} -m64"
+        HOSTTYPE=linux.i386-64
+        ;;
+  ia64)
+        RPM_OPT_FLAGS="${RPM_OPT_FLAGS//-O[s0-9]/-O}"
+        HOSTTYPE=linux.ia64
+        ;;
+  s390)
+        RPM_OPT_FLAGS="${RPM_OPT_FLAGS//-O[s0-9]/-O} -m31"
+        HOSTTYPE=linux.s390
+        ;;
+  s390*)
+        RPM_OPT_FLAGS="${RPM_OPT_FLAGS//-O[s0-9]/-O} -m64"
+        HOSTTYPE=linux.s390-64
+        ;;
   ppc|powerpc)
-    set -C
-    (cat > ${TMPDIR:-/tmp}/gcc)<<-EOF
-       #!/bin/sh
-       case "$@" in
-       *-dumpmachine*)
-           echo powerpc-suse-linux ;;
-       *)  exec -a gcc gcc ${1+"$@"}
-       esac
-       EOF
-    set +C
-    chmod +x ${TMPDIR:-/tmp}/gcc
+        RPM_OPT_FLAGS="${RPM_OPT_FLAGS//-O[s0-9]/-O} -mno-powerpc64"
+        HOSTTYPE=linux.powerpc
+        ;;
+  ppc64|powerpc64)
+        RPM_OPT_FLAGS="${RPM_OPT_FLAGS//-O[s0-9]/-O} -mpowerpc64"
+        HOSTTYPE=linux.powerpc64
+        ;;
+  *)
+        RPM_OPT_FLAGS="${RPM_OPT_FLAGS//-O[s0-9]/-O}"
+        HOSTTYPE=linux.$RPM_ARCH
+        ;;
   esac
   RPM_OPT_FLAGS=$(echo "${RPM_OPT_FLAGS}"|sed -r 's/[[:blank:]]+-g[0-9]?/ 
-g2/g')
   UNIVERSE=att
@@ -305,7 +316,6 @@
   cflags -Wl,-rpath,/%{_lib}/ast           LDSOFLG
   RPM_OPT_FLAGS="$RPM_OPT_FLAGS -D_GNU_SOURCE $LARGEFILE"
   RPM_OPT_FLAGS="$RPM_OPT_FLAGS $IGNORE $FEATURE"
-  HOSTTYPE=linux.${RPM_ARCH}
   mam_cc_L=use
   mam_cc_OPTIMIZE=-pipe
   export mam_cc_L mam_cc_OPTIMIZE HOSTTYPE LDFLAGS RPM_OPT_FLAGS UNIVERSE

++++++ ksh93-argv.dif ++++++
--- src/cmd/ksh93/sh/xec.c
+++ src/cmd/ksh93/sh/xec.c      2011-06-14 13:31:32.471925963 +0200
@@ -2914,7 +2914,7 @@ int sh_fun(Namval_t *np, Namval_t *nq, c
        long            mode;
        char            *prefix = shp->prefix;
        int n=0;
-       char *av[2];
+       char *av[3];
        Fcin_t save;
        fcsave(&save);
        if((offset=staktell())>0)
@@ -2922,7 +2922,7 @@ int sh_fun(Namval_t *np, Namval_t *nq, c
        shp->prefix = 0;
        if(!argv)
        {
-               argv = av;
+               argv = av+1;
                argv[1]=0;
        }
        argv[0] = nv_name(np);
++++++ ksh93-array.dif ++++++
--- /var/tmp/diff_new_pack.B6V6VG/_old  2011-06-17 15:24:36.000000000 +0200
+++ /var/tmp/diff_new_pack.B6V6VG/_new  2011-06-17 15:24:36.000000000 +0200
@@ -49,3 +49,14 @@
                        {
                                if((ap->header.nelem&ARRAY_NOCHILD) && 
nv_isattr(ap->cur,NV_CHILD))
                                        continue;
+--- src/cmd/ksh93/sh/xec.c
++++ src/cmd/ksh93/sh/xec.c     2011-06-14 13:31:32.471925963 +0200
+@@ -680,7 +680,7 @@ static int set_instance(Shell_t *shp,Nam
+       char            *sp=0,*cp;
+       Namarr_t        *ap;
+       Namval_t        *np;
+-      if(!nv_isattr(nq,NV_MINIMAL|NV_EXPORT) && (np=(Namval_t*)nq->nvenv) && 
nv_isarray(np))
++      if(!nv_isattr(nq,NV_MINIMAL|NV_EXPORT|NV_ARRAY) && 
(np=(Namval_t*)nq->nvenv) && nv_isarray(np))
+               nq = np;
+       cp = nv_name(nq);
+       memset(nr,0,sizeof(*nr));

++++++ ksh93-eintr.dif ++++++
--- /var/tmp/diff_new_pack.B6V6VG/_old  2011-06-17 15:24:36.000000000 +0200
+++ /var/tmp/diff_new_pack.B6V6VG/_new  2011-06-17 15:24:36.000000000 +0200
@@ -47,17 +47,6 @@
  }
  
  /*
---- src/cmd/ksh93/sh/subshell.c
-+++ src/cmd/ksh93/sh/subshell.c        2011-04-29 15:34:13.747926082 +0200
-@@ -235,7 +235,7 @@
-       if(!sp->shpwd || np==SH_LEVELNOD || np==L_ARGNOD || np==SH_SUBSCRNOD || 
np==SH_NAMENOD)
-               return(np);
-       /* don't bother to save if in newer scope */
--      if(sp->var!=shp->var_tree && sp->var!=shp->var_base && 
shp->last_root==shp->var_tree)
-+      if(sp->var!=shp->var_tree && shp->last_root==shp->var_tree)
-               return(np);
-       if((ap=nv_arrayptr(np)) && (mp=nv_opensub(np)))
-       {
 --- src/cmd/ksh93/sh/xec.c
 +++ src/cmd/ksh93/sh/xec.c     2011-05-03 15:02:23.411926136 +0200
 @@ -53,6 +53,7 @@

++++++ ksh93-pipe.dif ++++++
--- src/cmd/ksh93/include/defs.h
+++ src/cmd/ksh93/include/defs.h        2011-06-10 17:37:22.852426230 +0200
@@ -154,7 +154,7 @@ struct limits
        pid_t           bckpid;         /* background process id */ \
        pid_t           cpid; \
        pid_t           pipepid; \
-       int32_t         ppid;           /* parent process id of shell */ \
+       pid_t           ppid;           /* parent process id of shell */ \
        int             topfd; \
        int             sigmax;         /* maximum number of signals */ \
        int             savesig; \
--- src/cmd/ksh93/sh/io.c
+++ src/cmd/ksh93/sh/io.c       2011-06-10 18:13:02.511926423 +0200
@@ -1076,15 +1076,18 @@ int     sh_redirect(Shell_t *shp,struct iono
                                                message = e_file;
                                                goto fail;
                                        }
-                                       if(shp->subshell && dupfd==1 && 
(sfset(sfstdout,0,0)&SF_STRING))
+                                       if(shp->subshell && dupfd==1)
                                        {
                                                
if(sfset(sfstdout,0,0)&SF_STRING)
                                                        sh_subtmpfile(shp);
-                                               shp->subdup |= 1<< fn;
+                                               if(shp->comsub==1)
+                                                       shp->subdup |= 1<< fn;
                                                dupfd = sffileno(sfstdout);
                                        }
                                        else if(shp->sftable[dupfd])
                                                sfsync(shp->sftable[dupfd]);
+                                       if(dupfd!=1 && fn < 10)
+                                               shp->subdup &= ~(1<<fn);
                                }
                                else if(fd=='-' && fname[1]==0)
                                {
--- src/cmd/ksh93/sh/xec.c
+++ src/cmd/ksh93/sh/xec.c      2011-06-10 18:09:32.396425650 +0200
@@ -86,10 +86,11 @@ struct funenv
  * temp file.
  */
 static int     subpipe[3] = {-1};
-static int     subdup;
+static int     subdup,tsetio,usepipe;
 static void iousepipe(Shell_t *shp)
 {
        int i;
+       usepipe++;
        fcntl(subpipe[0],F_SETFD,FD_CLOEXEC);
        subpipe[2] = fcntl(1,F_DUPFD,10);
        shp->fdstatus[subpipe[2]] = shp->fdstatus[1];
@@ -112,6 +113,7 @@ static void iounpipe(Shell_t *shp)
 {
        int n;
        char buff[SF_BUFSIZE];
+       usepipe = 0;
        close(1);
        fcntl(subpipe[2], F_DUPFD, 1);
        shp->fdstatus[1] = shp->fdstatus[subpipe[2]];
@@ -135,6 +137,7 @@ static void iounpipe(Shell_t *shp)
        }
        sh_close(subpipe[0]);
        subpipe[0] = -1;
+       tsetio = 0;
 }
 
 /*
@@ -533,8 +536,10 @@ int sh_eval(register Sfio_t *iop, int mo
        static Sfio_t *io_save;
        volatile int traceon=0, lineno=0;
        int binscript=shp->binscript;
+       char comsub = shp->comsub;
        io_save = iop; /* preserve correct value across longjmp */
        shp->binscript = 0;
+       shp->comsub = 0;
 #define SH_TOPFUN      0x8000  /* this is a temporary tksh hack */
        if (mode & SH_TOPFUN)
        {
@@ -573,6 +578,7 @@ int sh_eval(register Sfio_t *iop, int mo
                        break;
        }
        sh_popcontext(&buff);
+       shp->comsub = comsub;
        shp->binscript = binscript;
        if(traceon)
                sh_onoption(SH_XTRACE);
@@ -1245,13 +1251,16 @@ int sh_exec(register const Shnode_t *t,
                    {
                        register pid_t parent;
                        int no_fork,jobid;
-                       int pipes[2];
+                       int pipes[3];
                        if(shp->subshell)
                        {
                                sh_subtmpfile(shp);
-                               subpipe[0] = -1;
-                               if(shp->comsub==1 && 
!(shp->fdstatus[1]&IONOSEEK) && sh_pipe(subpipe)>=0)
-                                       iousepipe(shp);
+                               if(!usepipe)
+                               {
+                                       subpipe[0] = -1;
+                                       if(shp->comsub==1 && 
!(shp->fdstatus[1]&IONOSEEK) && sh_pipe(subpipe)>=0)
+                                               iousepipe(shp);
+                               }
                                if((type&(FAMP|TFORK))==(FAMP|TFORK))
                                        sh_subfork();
                        }
@@ -1291,7 +1300,10 @@ int sh_exec(register const Shnode_t *t,
 #endif /* SHOPT_BGX */
                                nv_getval(RANDNOD);
                                if(type&FCOOP)
+                               {
+                                       pipes[2] = 0;
                                        coproc_init(shp,pipes);
+                               }
 #if SHOPT_AMP
                                if((type&(FAMP|FINT)) == (FAMP|FINT))
                                        parent = 
sh_ntfork(shp,t,com,&jobid,ntflag);
@@ -1353,6 +1365,8 @@ int sh_exec(register const Shnode_t *t,
                                                shp->pipepid = parent;
                                        else
                                                job_wait(parent);
+                                       if(usepipe && tsetio && subdup)
+                                               iounpipe(shp);
                                        if(!sh_isoption(SH_MONITOR))
                                        {
                                                shp->trapnote &= ~SH_SIGIGNORE;
@@ -1496,6 +1510,8 @@ int sh_exec(register const Shnode_t *t,
                        jmpval = sigsetjmp(buff.buff,0);
                        if(jmpval==0)
                        {
+                               if(shp->comsub==1)
+                                       tsetio = 1;
                                sh_redirect(shp,t->fork.forkio,execflg);
                                (t->fork.forktre)->tre.tretyp |= 
t->tre.tretyp&FSHOWME;
                                sh_exec(t->fork.forktre,flags&~simple);
@@ -1523,6 +1539,8 @@ int sh_exec(register const Shnode_t *t,
                                        if(type || !sh_isoption(SH_PIPEFAIL))
                                                shp->exitval = type;
                                }
+                               if(shp->comsub==1 && subpipe[0]>=0)
+                                       iounpipe(shp);
                                shp->pipepid = 0;
                                shp->st.ioset = 0;
                                if(simple && was_errexit)
@@ -1580,14 +1598,22 @@ int sh_exec(register const Shnode_t *t,
                     * All elements of the pipe are started by the parent.
                     * The last element executes in current environment
                     */
-                       int     pvo[2]; /* old pipe for multi-stage */
-                       int     pvn[2]; /* current set up pipe */
+                       int     pvo[3]; /* old pipe for multi-stage */
+                       int     pvn[3]; /* current set up pipe */
                        int     savepipe = pipejob;
                        int     showme = t->tre.tretyp&FSHOWME;
                        pid_t   savepgid = job.curpgid;
                        job.curpgid = 0;
                        if(shp->subshell)
+                       {
                                sh_subtmpfile(shp);
+                               if(!usepipe)
+                               {
+                                       subpipe[0] = -1;
+                                       if(shp->comsub==1 && 
!(shp->fdstatus[1]&IONOSEEK) && sh_pipe(subpipe)>=0)
+                                               iousepipe(shp);
+                               }
+                       }
                        shp->inpipe = pvo;
                        shp->outpipe = pvn;
                        pvo[1] = -1;
@@ -2543,7 +2569,10 @@ pid_t _sh_fork(register pid_t parent,int
                if(jobid)
                        *jobid = myjob;
                if(shp->comsub==1 && subpipe[0]>=0)
-                       iounpipe(shp);
+               {
+                       if(!tsetio || !subdup)
+                               iounpipe(shp);
+               }
                return(parent);
        }
 #if !_std_malloc
@@ -2602,6 +2631,7 @@ pid_t _sh_fork(register pid_t parent,int
        if(sig>0)
                sh_fault(sig);
        sh_sigcheck();
+       usepipe=0;
        return(0);
 }
 
++++++ ksh93-shift_ijs.dif ++++++
--- /var/tmp/diff_new_pack.B6V6VG/_old  2011-06-17 15:24:36.000000000 +0200
+++ /var/tmp/diff_new_pack.B6V6VG/_new  2011-06-17 15:24:36.000000000 +0200
@@ -116,17 +116,110 @@
        else
        {
 --- src/cmd/ksh93/sh/macro.c
-+++ src/cmd/ksh93/sh/macro.c   2007-12-20 17:50:28.000000000 +0000
-@@ -2079,7 +2079,7 @@
++++ src/cmd/ksh93/sh/macro.c   2011-06-10 08:20:29.451926367 +0000
+@@ -51,6 +51,8 @@
+ 
+ #if !SHOPT_MULTIBYTE
+ #define mbchar(p)       (*(unsigned char*)p++)
++#else
++#define mb2wc(w,p,n)  (*ast.mb_towc)(&w,(char*)p,n)
+ #endif
+ 
+ static int    _c_;
+@@ -494,7 +496,7 @@ static void copyto(register Mac_t *mp,in
+                                       int             i;
+                                       unsigned char   mb[8];
+ 
+-                                      n = wctomb((char*)mb, c);
++                                      n = mbconv((char*)mb, c);
+                                       for(i=0;i<n;i++)
+                                               sfputc(stkp,mb[i]);
+                               }
+@@ -1908,6 +1910,9 @@ static void comsubst(Mac_t *mp,register
+       struct _mac_            savemac;
+       int                     savtop = stktell(stkp);
+       char                    lastc, *savptr = stkfreeze(stkp,0);
++#if SHOPT_MULTIBYTE
++      wchar_t                 lastw;
++#endif
+       int                     was_history = sh_isstate(SH_HISTORY);
+       int                     was_verbose = sh_isstate(SH_VERBOSE);
+       int                     was_interactive = sh_isstate(SH_INTERACTIVE);
+@@ -2025,6 +2030,9 @@ static void comsubst(Mac_t *mp,register
+       stkset(stkp,savptr,savtop);
+       newlines = 0;
+       lastc = 0;
++#if SHOPT_MULTIBYTE
++      lastw = 0;
++#endif
+       sfsetbuf(sp,(void*)sp,0);
+       bufsize = sfvalue(sp);
+       /* read command substitution output and put on stack or here-doc */
+@@ -2075,6 +2083,17 @@ static void comsubst(Mac_t *mp,register
+               }
+               else if(lastc)
+               {
++#if SHOPT_MULTIBYTE
++                      if(lastw)
++                      {
++                              int     n;
++                              char    mb[8];
++                              n = mbconv(mb, lastw);
++                              mac_copy(mp,mb,n);
++                              lastw = 0;
++                      }
++                      else
++#endif
+                       mac_copy(mp,&lastc,1);
                        lastc = 0;
                }
-               newlines = nextnewlines;
--              if(++c < bufsize)
-+              if(c++ < bufsize)
+@@ -2083,8 +2102,22 @@ static void comsubst(Mac_t *mp,register
                        str[c] = 0;
                else
                {
-@@ -2167,13 +2167,13 @@ static void mac_copy(register Mac_t *mp,
++                      ssize_t len = 1;
++
+                       /* can't write past buffer so save last character */
+-                      lastc = str[--c];
++#if SHOPT_MULTIBYTE
++                      if ((len = mbsize(str))>1)
++                      {
++                              len = mb2wc(lastw,str,len);
++                              if (len < 0)
++                              {
++                                      lastw = 0;
++                                      len = 1;
++                              }
++                      }
++#endif
++                      c -= len;
++                      lastc = str[c];
+                       str[c] = 0;
+               }
+               mac_copy(mp,str,c);
+@@ -2102,7 +2135,21 @@ static void comsubst(Mac_t *mp,register
+                       sfnputc(stkp,'\n',newlines);
+       }
+       if(lastc)
++      {
++#if SHOPT_MULTIBYTE
++              if(lastw)
++              {
++                      int     n;
++                      char    mb[8];
++                      n = mbconv(mb, lastw);
++                      mac_copy(mp,mb,n);
++                      lastw = 0;
++              }
++              else
++#endif
+               mac_copy(mp,&lastc,1);
++              lastc = 0;
++      }
+       sfclose(sp);
+       return;
+ }
+@@ -2173,13 +2220,13 @@ static void mac_copy(register Mac_t *mp,
                if(mp->pattern)
                {
                        char *sp = "&|()";
@@ -163,8 +256,8 @@
  #if SHOPT_MULTIBYTE
                        int len;
 --- src/cmd/ksh93/tests/sjis.sh
-+++ src/cmd/ksh93/tests/sjis.sh        2007-12-20 17:50:28.000000000 +0000
-@@ -0,0 +1,63 @@
++++ src/cmd/ksh93/tests/sjis.sh        2011-05-20 17:11:28.623926368 +0200
+@@ -0,0 +1,67 @@
 +########################################################################
 +#                                                                      #
 +#   Copyright (c) 2007 SuSE Linux Products GmbH, Nuernberg, Germany    #
@@ -207,11 +300,15 @@
 +    mbchar="$(printf "\x81\x${second}")"
 +    if test -z "${mbchar}" ; then
 +      let err++               # ERROR in builtin printf
++      echo ' builtin printf with \\x81\\x'${second} failed as result is empty
 +      continue
 +    fi
 +    if test -x "${printf}" ; then
 +      if test $(${printf} "\x81\x${second}") != ${mbchar} ; then
 +          let err++           # ERROR in builtin printf
++          echo -n ' \\x81\\x'${second} 'failed with '
++          echo -n $(${printf} "\x81\x${second}") '!= '
++          echo ${mbchar}
 +          continue
 +      fi
 +    fi

++++++ ksh93.dif ++++++
--- /var/tmp/diff_new_pack.B6V6VG/_old  2011-06-17 15:24:36.000000000 +0200
+++ /var/tmp/diff_new_pack.B6V6VG/_new  2011-06-17 15:24:36.000000000 +0200
@@ -239,7 +239,7 @@
                foo() { return 0; }
                trap foo EXIT
 -              { sleep 2; kill -$exp \$\$; sleep 3; kill -0 \$\$ && kill -KILL 
\$\$; } &
-+              { sleep 2; kill -$exp \$\$; sleep 4; kill -0 \$\$ && kill -KILL 
\$\$; } &
++              { sleep 2; kill -$exp \$\$; sleep 6; kill -0 \$\$ && kill -KILL 
\$\$; } &
                $yes | while read yes; do
 -                      (/bin/date; sleep .1)
 +                      (/bin/date; sleep .05)


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



Remember to have fun...

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

Reply via email to