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]
