Hello community, here is the log from the commit of package ksh for openSUSE:Factory checked in at 2017-12-21 11:29:43 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/ksh (Old) and /work/SRC/openSUSE:Factory/.ksh.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ksh" Thu Dec 21 11:29:43 2017 rev:108 rq:558827 version:93vu Changes: -------- --- /work/SRC/openSUSE:Factory/ksh/ksh.changes 2015-06-30 10:19:23.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.ksh.new/ksh.changes 2017-12-21 11:29:53.381951662 +0100 @@ -1,0 +2,86 @@ +Wed Dec 20 13:18:32 CET 2017 - m...@suse.de + +- fix build with new glibc versions + new patch: ksh93-filedefined.dif + +------------------------------------------------------------------- +Wed Oct 12 13:23:14 CEST 2016 - m...@suse.de + +- fix locking error in spawn implementation [bnc#988213] + new patch: ksh93-spawnlock.dif +- make patch ordering the same as in sle-11 + +------------------------------------------------------------------- +Tue Jul 5 14:49:03 CEST 2016 - m...@suse.de + +- own the ksh files in /etc/alternatives [bnc#987362] [bnc#962069] +- fix leak in optimize processing [bnc#982423] + new patch: ksh93-optimizeleak.dif +- fix editor prediction code garbling input [bnc#964966] + new patch: ksh93-edpredict.dif + +------------------------------------------------------------------- +Wed Dec 16 16:00:53 CET 2015 - m...@suse.de + +- add ast suffix to optbin manpages to prevent file conflicts +- fix fd leak when doing redirects in a subshell [bnc#954856] + new patch: ksh93-redirectleak.dif +- rewrite ksh93-backtick.dif to a more correct version + [bnc#953533] [bnc#955221] +- also tweak ksh93-backtick.dif so that the pipe is drained after + io_restore is called. + +------------------------------------------------------------------- +Tue Sep 15 18:07:09 CEST 2015 - m...@suse.de + +- fix freeing memory twice if an array is turned into an + compound variable and then unset [bnc#924043] + new patch: ksh93-nvtree-free.dif +- backport fix for segmentation fault with 'typeset -RF' + new patch: ksh93-int16double.dif +- backport hanging command substitution with large output fix from + upstream [bnc#887320] [bnc#926172] [bnc#934437] + new patch: ksh93-backtick.dif +- backport job list corruption fix from ksg93v [bnc#924318] + new patch: ksh93-jpold.dif + +------------------------------------------------------------------- +Fri Jun 12 13:54:45 CEST 2015 - m...@suse.de + +- go back to ksh93u to have a stable version in SLE-12 + use 93vu as version so that the software stack sees this + as an update. (FATE#319107, bsc#939252) +- add back the following patches: + * astksh_builtin_poll20120806_001.diff + * ksh93-backticks.dif + * ksh93-crashes.dif + * ksh93-dttree-crash.dif + * ksh93-fdstatus.dif + * ksh93-heredoclex.dif + * ksh93-jobs.dif + * ksh93-sfio.dif + * ksh93-uninitialized.dif +- fix stk aliasing code [bnc#844071] + new patch: ksh93-stkalias.dif +- fix stk restoration in sh_exec [bnc#844071] + new patch: ksh93-stkfreeze.dif +- make a unknown location fatal in stkset so that we get a core + dump right away instead of later in an unrelated part of code + new patch: ksh93-stkset-abort.dif +- fix build with std malloc + new patch: ksh93-malloc-hook.dif +- backport job locking code fix + new patch: ksh93-joblock.dif +- disable vfork, use fork instead + new patch: ksh93-disable-vfork.dif +- fix crash when the subshell number overflows [bnc#893031] + new patch: ksh93-longenv.dif +- fix path normalization in cd command [bnc#867401] + new patch: ksh93-cdpwd.dif +- fix segfault in dirname when cwd is gone [bnc#852160] + new patch: ksh93-subshellpwd.dif +- Fix ksh using wrong files is some elements in the path do not + exist [bnc#899014] + new patch: ksh93-path-skip.dif + +------------------------------------------------------------------- Old: ---- INIT.2014-06-25.tar.bz2 ast-base.2014-06-25.tar.bz2 ksh93-backticks.dif ksh93-crashes.dif New: ---- INIT.2012-08-01.tar.bz2 ast-base.2012-08-01.tar.bz2 astksh_builtin_poll20120806_001.diff ksh93-backtick.dif ksh93-cdpwd.dif ksh93-disable-vfork.dif ksh93-dttree-crash.dif ksh93-edpredict.dif ksh93-fdstatus.dif ksh93-filedefined.dif ksh93-heredoclex.dif ksh93-int16double.dif ksh93-joblock.dif ksh93-jobs.dif ksh93-jpold.dif ksh93-longenv.dif ksh93-malloc-hook.dif ksh93-nvtree-free.dif ksh93-optimizeleak.dif ksh93-path-skip.dif ksh93-redirectleak.dif ksh93-sfio.dif ksh93-spawnlock.dif ksh93-stkalias.dif ksh93-stkfreeze.dif ksh93-stkset-abort.dif ksh93-subshellpwd.dif ksh93-uninitialized.dif ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ ksh.spec ++++++ --- /var/tmp/diff_new_pack.H72VXR/_old 2017-12-21 11:29:57.169766971 +0100 +++ /var/tmp/diff_new_pack.H72VXR/_new 2017-12-21 11:29:57.169766971 +0100 @@ -1,7 +1,7 @@ # # spec file for package ksh # -# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: ksh -%global date 2014-06-25 +%global date 2012-08-01 %global use_suid_exe 0 %if %suse_version > 1210 %global use_opt_bins 1 @@ -25,13 +25,11 @@ %global use_opt_bins 0 %endif %if !0%{?qemu_user_space_build:1} -%bcond_without do_tests +%global do_tests 1 %else -%bcond_with do_tests +%global do_tests 0 %endif -%bcond_with use_locale -%bcond_with vm_debug -%bcond_without skip_signals +%global use_locale 0 BuildRequires: bind-utils BuildRequires: bison BuildRequires: flex @@ -50,15 +48,6 @@ %if %suse_version > 1120 BuildRequires: update-alternatives %endif -%if %{with vm_debug} -BuildRequires: ccache -BuildRequires: gdb -BuildRequires: less -BuildRequires: procps -BuildRequires: strace -BuildRequires: valgrind -BuildRequires: vim -%endif # /bin/ex and /bin/ed required for build BuildRequires: awk BuildRequires: ed @@ -74,7 +63,7 @@ %if %use_suid_exe PreReq: permissions %endif -Version: 93v +Version: 93vu Release: 0 Summary: Korn Shell License: CPL-1.0 and EPL-1.0 @@ -112,31 +101,64 @@ Patch15: ksh93-s390.dif Patch16: ksh93-gcc.dif Patch17: ksh93-heredoc.dif +Patch18: ksh93-jobs.dif Patch19: ksh93-reg.dif Patch20: ksh93-aso.dif Patch21: ksh93-vm.dif Patch22: ksh93-limit-name-len.dif Patch23: ksh93-foreground-prgrp.dif Patch24: ksh93-builtin.dif +# PATCH-FIX-UPSTREAM ksh93-read-dont-ignore-esc.dif [bnc#765171] +# is part of ksh93u+ 2012-06-28 +# PATCH-EXTEND-UPSTREAM astksh_builtin_poll20120806_001.diff [bnc#779888] +Patch27: astksh_builtin_poll20120806_001.diff # PATCH-FIX-UPSTREAM ksh93-env.dif [bnc#785266, bnc#803613] Patch28: ksh93-env.dif -# PATCH-FIX-SUSE ksh93-typedef.dif +# PATCH-FIX-UPSTREAM ksh93-typedef.dif Patch29: ksh93-typedef.dif # PATCH-EXTEND-UPSTREAM ksh93-pathtemp.dif [bnc#786134] # the fix is part of ksh93u+ 2012-06-28 # nevertheless the /dev/shm extension is useful Patch30: ksh93-pathtemp.dif +# PATCH-FIX-UPSTREAM ksh93-dttree-crash.dif [bnc#795324] +Patch31: ksh93-dttree-crash.dif +# PATCH-FIX-UPSTREAM ksh93-heredoclex.dif [bnc#804998] +Patch32: ksh93-heredoclex.dif +# PATCH-FIX-UPSTREAM ksh93-fdstatus.dif [bnc#808449, bnc#814135] +# this is a backport from the alpha version ksh93v-2013-04-22 +Patch33: ksh93-fdstatus.dif # PATCH-FIX-UPSTREAM ksh93-alias-k.dif [bnc#824187] Patch34: ksh93-alias-k.dif -# PATCH-FIX-SUSE Do not use mount(2) system call instead of fs3d_mount(3ast) -Patch36: ksh93-fs3d.dif -# PATCH-FIX-SUSE Various crashes fixed for bnc#844071 -Patch37: ksh93-crashes.dif -# PATCH-FIX-SUSE Strings in backticks cannot be longer than 65536 characters bnc#887320 -Patch38: ksh93-backticks.dif -# PATCH-FIX-UPSTREAM fix use of cc -E without -P -Patch39: cpp.patch -Patch42: ksh-locale.patch +# PATCH-FIX-SUSE Reduce warnings about uninitialized varaibles (most of them are handled correct) +Patch35: ksh93-uninitialized.dif +# PATCH-FIX-UPSTREAM Ouch ... use memmove instead of memcopy on overlapping areas +Patch36: ksh93-sfio.dif +# [bnc#899014] +Patch37: ksh93-path-skip.dif +Patch38: ksh93-fs3d.dif +# [bnc#852160] +Patch39: ksh93-subshellpwd.dif +# [bnc#867401] +Patch40: ksh93-cdpwd.dif +# [bnc#893031] +Patch41: ksh93-longenv.dif +Patch42: ksh93-malloc-hook.dif +Patch43: ksh93-disable-vfork.dif +Patch44: ksh93-joblock.dif +Patch45: ksh93-stkfreeze.dif +Patch46: ksh93-stkset-abort.dif +Patch47: ksh93-stkalias.dif +Patch48: ksh93-backtick.dif +Patch49: ksh93-nvtree-free.dif +Patch50: ksh93-int16double.dif +Patch51: ksh93-jpold.dif +Patch52: ksh93-redirectleak.dif +Patch53: ksh93-optimizeleak.dif +Patch54: ksh93-edpredict.dif +Patch55: ksh93-spawnlock.dif +Patch56: ksh93-filedefined.dif +Patch62: ksh-locale.patch +Patch63: cpp.patch %description The original Korn Shell. The ksh is an sh-compatible command @@ -177,7 +199,7 @@ tar --use-compress-program=bzcat -xf %{S:1} \ lib/package/ \ src/cmd/ksh93/ src/lib/libast/ src/lib/libcmd/ src/lib/libcoshell/ src/lib/libdll/ src/lib/libsum/ \ - src/cmd/builtin/ src/cmd/msggen/ src/cmd/msgcc/ src/lib/libpp/ src/lib/libuu/ + src/cmd/builtin/ src/cmd/msgcc/ src/lib/libpp/ src/lib/libuu/ if test -d share ; then find share/ \( -name chef -o -name fudd -o -name piglatin -o -name valley \) -a -type d |\ xargs -r rm -vrf @@ -187,6 +209,7 @@ find share/ -type d -a -empty | xargs -r rm -vrf fi %patch +%patch62 %patch1 %ifarch %arm %patch2 @@ -208,40 +231,78 @@ %patch15 %patch16 %patch17 +%patch18 %patch19 %patch20 %patch21 %patch22 %patch23 %patch24 +%patch27 %patch28 %patch29 %patch30 +%patch31 +%patch32 +%patch33 %patch34 +%patch35 %patch36 %patch37 -#%patch38 -%patch39 -p1 +%patch38 +%patch39 +%patch40 +%patch41 %patch42 +%if 0%{?ksh_no_vfork} +%patch43 +%endif +%patch44 +%patch45 +%patch46 +%patch47 +%patch48 +%patch49 +%patch50 +%patch51 +%patch52 +%patch53 +%patch54 +%patch55 +%patch56 -%build - PATH=$(getconf PATH) - export PATH - unset MALLOC_CHECK_ +%patch63 -p 1 - if test "$USESIGEXEC" != 0 ; then +%build # - # The environment variable USESIGEXEC is set by the sigexec - # helper program which provides a real pty/tty pair as well - # as a clean signal environment. + # Check for a clean signal environment for runtime tests # - ${CC:-gcc} ${RPM_OPT_FLAGS} -D_GNU_SOURCE -o sigexec %{S:42} -lutil + typeset -i IGNORED=0x$(ps --no-headers -o ignored $$) + typeset -i SIGMASK=0x0 + typeset -i usesigexec=0 + + let "SIGMASK|=(1<<($(kill -l PIPE)-1))" + let "SIGMASK|=(1<<($(kill -l URG) -1))" + let "SIGMASK|=(1<<($(kill -l XFSZ)-1))" + + ((IGNORED & SIGMASK)) && let ++usesigexec || true + test -t 0 || let ++usesigexec + +%if 0%{?qemu_user_space_build:1} + # agraf: In a qemu user space build, ps can not find the actual sigmask + # of processes, so we run into an endless loop. Disable sigexec. + usesigexec=0 +%endif + + if ((usesigexec > 0)) ; then + ${CC:-gcc} ${RPM_OPT_FLAGS} -o sigexec %{S:42} -lutil for fd in /proc/$$/fd/*; do test -s $fd -a ! -c $fd && break || true done set -- $(readlink $fd) exec ./sigexec $SHELL ${1+"$@"} fi + IGNORED=0x$(ps --no-headers -o ignored $$) AR="ar" CC=gcc @@ -328,14 +389,10 @@ #define SHOPT_REMOTE 1 #define SHOPT_CMDLIB_BLTIN 1 #define SHOPT_CMDLIB_HDR <cmdlist.h> - #define SHOPT_CMDLIB_DIR "/opt/ast/bin" - #define SH_CMDLIB_DIR "/opt/ast/bin" + #define SHOPT_CMDLIB_DIR "/%{_lib}/ast/bin" + #define SH_CMDLIB_DIR "/%{_lib}/ast/bin" #define THISPROG "/%{_lib}/ast/bin/suid_exec" -%if %{with vm_debug} - #define _AST_std_malloc 1 -%else #define _AST_std_malloc 0 -%endif #define _map_malloc 1 EOF set +C @@ -415,9 +472,6 @@ cflags -fsigned-bitfields RPM_OPT_FLAGS cflags -fsigned-chars RPM_OPT_FLAGS cflags -fsigned-zeros RPM_OPT_FLAGS -%if %{with vm_debug} - cflags -fno-omit-frame-pointer RPM_OPT_FLAGS -%endif case "$(gcc --version | head -n 1)" in *4.[012345].*) cflags -fno-tree-sink RPM_OPT_FLAGS ;; @@ -425,8 +479,6 @@ esac cflags -g2 RPM_OPT_FLAGS cflags -pipe RPM_OPT_FLAGS - cflags -D_GNU_SOURCE RPM_OPT_FLAGS - cflags -D_REENTRANT RPM_OPT_FLAGS cflags -Wl,-O2 LDFLAGS cflags -Wl,--hash-size=16699 LDFLAGS cflags -Wl,-O2 LDSOFLG @@ -435,7 +487,7 @@ cflags -Wl,--hash-size=8599 LDSOFLG cflags -Wl,-Bsymbolic-functions LDSOFLG cflags -Wl,-rpath,/%{_lib}/ast LDSOFLG - RPM_OPT_FLAGS="$RPM_OPT_FLAGS $LARGEFILE" + RPM_OPT_FLAGS="$RPM_OPT_FLAGS -D_GNU_SOURCE $LARGEFILE" RPM_OPT_FLAGS="$RPM_OPT_FLAGS $IGNORE $FEATURE" mam_cc_L=use mam_cc_OPTIMIZE=-pipe @@ -489,7 +541,7 @@ *) cflags @$nobuiltin RPM_OPT_FLAGS esac - export | grep -vE 'PROFILEREAD|PWD|MAIL|HOME|HOST|HIST|LESS' > .env + export | grep -vE 'PROFILEREAD|PWD|MAIL|HOME|HOST|HIST|LESS|TMP' > .env bin/package make CCFLAGS="$RPM_OPT_FLAGS -I${root}/include" HOSTTYPE="$HOSTTYPE" AR="$AR" CC="$CC" root=$(echo ${PWD}/arch/linux*) test -d $root || exit 1 @@ -529,30 +581,19 @@ popd done base=src/cmd/ksh93 -%if %{with do_tests} - pushd ${root}/bin - mkdir ${TMPDIR}/bin - for bin in * ; do - test -e "$bin" || continue - test "$bin" = ".paths" && continue - test "${bin#*.}" = "old" && continue - install -m 0755 $bin ${TMPDIR}/bin/ - done - popd test=${PWD}/${base}/tests OPATH=$PATH OSHELL=$SHELL - PATH=${TMPDIR}/bin:$PATH - SHELL=${TMPDIR}/bin/ksh - SHCOMP=${TMPDIR}/bin/shcomp + PATH=$PATH:${root}/bin + SHELL=${root}/bin/ksh + SHCOMP=${root}/bin/shcomp export PATH SHCOMP SHELL +%if %do_tests pushd ${test} -%if %{with skip_signals} - echo "Skip signal.sh test as this is broken due used malloc() in signal handlers" - rm -vf signal.sh -%endif typeset -i failed=0 ln -sf ${root}/lib ${test}/../ + sed -ri '/^L[[:blank:]]/a \t 8000' pty.sh + sed -ri 's/(SECONDS[[:blank:]]*>[[:blank:]]*)([[:digit:]]+)/\18/' signal.sh unset ${!LESS*} printf '\033[1m' grep -E '^(model name|flags)[[:blank:]]*:' /proc/cpuinfo | sort -ur | fold -s @@ -564,19 +605,6 @@ test "$result" = xy || exit 1 result=$(${SHELL} -c 'echo | echo "x$(/bin/echo y)"') test "$result" = xy || exit 1 - ${SHELL} -c 'trap "exit 0" EXIT; typeset -T X=(typeset x; function x.get { :; }); X -a xs=((x=yo) (x=jo))' - cat > eso_boot.mod.sh <<-'EOF' - . ./environ.mod - EOF - cat > environ.mod <<-'EOF' - f() { - : - } - unset -f f - msg=`echo OK` - echo $msg - EOF - ${SHELL} ./eso_boot.mod.sh exec 3> ${TMPDIR:-/tmp}/log LANG=POSIX strace $MEMORY -o '!%{S:31}' ${SHELL} %{S:10} 400 @@ -632,7 +660,6 @@ s@^\+ g?cc@$SHELL msgcc -M-set=ast $includes@ s@[[:blank:]]-c[[:blank:]]([^[:blank:]\.]+/([^[:blank:]\.\/]+))\.c@ -c \1\.c -o msgs/\2\.mso@p }" ${root}/lib/package/gen/make.out > src/cmd/ksh93/doit -%if %{with use_locale} pushd src/cmd/ksh93 mkdir msgs ${root}/lib/probe/C/pp/probe $(type -p gcc) > pp_default.h @@ -641,7 +668,6 @@ rm -rf msgs/ popd msggen share/locale/C/LC_MESSAGES/libshell src/cmd/ksh93/libshell.msg -%endif pushd ${root}/bin PATH=$PATH:. set -- $(shcomp --version 2>&1) @@ -666,7 +692,7 @@ mkdir -p %{buildroot}%{_mandir} mkdir %{buildroot}%{_mandir}/man1 mkdir %{buildroot}%{_mandir}/man3 -%if %{with use_locale} +%if %use_locale mkdir -p %{buildroot}%{_datadir}/locale %endif mkdir -p %{buildroot}%{_datadir}/ksh/fun @@ -710,9 +736,6 @@ 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 @@ -722,12 +745,10 @@ done install -m 0644 lib/*.a %{buildroot}%{_libdir}/ast/ %if %suse_version > 1120 - install -m 0644 man/man1/sh.1 %{buildroot}%{_mandir}/man1/ksh93.1ast - ln -sf ../man1/ksh93.1ast.gz %{buildroot}/%{_mandir}/man1/ksh.1ast.gz - ln -sf ../man1/ksh93.1ast.gz %{buildroot}/%{_mandir}/man1/rksh.1ast.gz + install -m 0644 man/man1/sh.1 %{buildroot}%{_mandir}/man1/ksh93.1 %else - install -m 0644 man/man1/sh.1 %{buildroot}%{_mandir}/man1/ksh.1ast - ln -sf ../man1/ksh.1ast.gz %{buildroot}/%{_mandir}/man1/rksh.1ast.gz + install -m 0644 man/man1/sh.1 %{buildroot}%{_mandir}/man1/ksh.1 + ln -sf ../man1/ksh.1.gz %{buildroot}/%{_mandir}/man1/rksh.1.gz %endif install -m 0644 man/man1/shcomp.1ast %{buildroot}%{_mandir}/man1/shcomp.1ast %if %use_opt_bins @@ -740,24 +761,12 @@ ast=${man}ast install -m 0644 man/man3/${man} %{buildroot}%{_mandir}/man3/${ast} done - if test -d include/ast/sys/ ; then - for head in include/ast/* ; do - test -e "$head" || continue - if test -d $head ; then - install -d %{buildroot}%{_includedir}/ast/${head##*/} - install -m 0644 ${head}/* %{buildroot}%{_includedir}/ast/${head##*/}/ - else - install -m 0644 $head %{buildroot}%{_includedir}/ast/ - fi - done - else install -m 0644 include/ast/* %{buildroot}%{_includedir}/ast/ - fi if cmp -s %{buildroot}%{_includedir}/ast/namval.h %{buildroot}%{_includedir}/ast/ast_namval.h ; then ln -sf ast_namval.h %{buildroot}%{_includedir}/ast/namval.h fi popd -%if %{with use_locale} +%if %use_locale for msg in share/locale/* ; do test -d $msg || continue mkdir -p %{buildroot}%{_datadir}/locale/${msg##*/}/LC_MESSAGES @@ -809,9 +818,7 @@ %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 @@ -835,8 +842,8 @@ %endif --install /bin/ksh ksh /bin/ksh93 20 \ --slave %{_bindir}/ksh usr-bin-ksh /bin/ksh93 \ - --slave %{_mandir}/man1/ksh.1ast.gz ksh.1.gz %{_mandir}/man1/ksh93.1ast.gz \ - --slave %{_mandir}/man1/rksh.1ast.gz rksh.1.gz %{_mandir}/man1/ksh93.1ast.gz + --slave %{_mandir}/man1/ksh.1.gz ksh.1.gz %{_mandir}/man1/ksh93.1.gz \ + --slave %{_mandir}/man1/rksh.1.gz rksh.1.gz %{_mandir}/man1/ksh93.1.gz %else if test -x /%{_lib}/ast/bin/ksh ; then rm -f /%{_lib}/ast/bin/ksh @@ -851,13 +858,13 @@ %endif %if %suse_version > 1120 + %preun if test $1 -eq 0 ; then %{_sbindir}/update-alternatives --quiet --remove ksh /bin/ksh93 fi %endif -%if %suse_version < 1320 %postun if test $1 -eq 0 -a ! -x bin/ksh ; then if test ! -x bin/pdksh ; then @@ -867,14 +874,11 @@ rm -f bin/ksh %{_exec_prefix}/bin/ksh %endif fi -%endif -%if %suse_version < 1320 %posttrans 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) @@ -890,6 +894,7 @@ %{_bindir}/ksh %doc %{_mandir}/man1/ksh.1.gz %doc %{_mandir}/man1/rksh.1.gz +%doc %{_mandir}/man1/ksh93.1.gz %ghost %{_sysconfdir}/alternatives/ksh %ghost %{_sysconfdir}/alternatives/usr-bin-ksh %ghost %{_sysconfdir}/alternatives/ksh.1.gz @@ -897,14 +902,8 @@ %else %ghost %verify(not link) /bin/ksh %ghost %verify(not link) %{_bindir}/ksh -%endif -%if %suse_version > 1120 -%ghost %verify(not link) %{_mandir}/man1/ksh.1ast.gz -%ghost %verify(not link) %{_mandir}/man1/rksh.1ast.gz -%doc %{_mandir}/man1/ksh93.1ast.gz -%else -%doc %{_mandir}/man1/ksh.1ast.gz -%doc %{_mandir}/man1/rksh.1ast.gz +%doc %{_mandir}/man1/ksh.1.gz +%doc %{_mandir}/man1/rksh.1.gz %endif %doc %{_mandir}/man1/shcomp.1ast.gz %if %use_opt_bins @@ -926,9 +925,6 @@ %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) ++++++ INIT.2014-06-25.tar.bz2 -> INIT.2012-08-01.tar.bz2 ++++++ ++++ 4717 lines of diff (skipped) ++++++ ast-base.2014-06-25.tar.bz2 -> ast-base.2012-08-01.tar.bz2 ++++++ /work/SRC/openSUSE:Factory/ksh/ast-base.2014-06-25.tar.bz2 /work/SRC/openSUSE:Factory/.ksh.new/ast-base.2012-08-01.tar.bz2 differ: char 11, line 1 ++++++ astksh_builtin_poll20120806_001.diff ++++++ ++++ 887 lines (skipped) ++++++ ksh-locale.patch ++++++ --- /var/tmp/diff_new_pack.H72VXR/_old 2017-12-21 11:29:57.557748054 +0100 +++ /var/tmp/diff_new_pack.H72VXR/_new 2017-12-21 11:29:57.561747859 +0100 @@ -1,8 +1,8 @@ --- lib/package/ast-ksh.pkg +++ lib/package/ast-ksh.pkg 2011-07-05 16:29:57.891926052 +0000 @@ -1,4 +1,4 @@ --ast-ksh :PACKAGE: ksh93 msggen libast libcmd libcoshell libsum libdll -+ast-ksh :PACKAGE: ksh93 msggen msgcc libpp libast libcmd libcoshell libsum libdll +-ast-ksh :PACKAGE: ksh93 libast libcmd libcoshell libsum libdll ++ast-ksh :PACKAGE: msgcc ksh93 libpp libast libcmd libcoshell libsum libdll :COVERS: ksh ++++++ ksh-qemu.patch ++++++ --- /var/tmp/diff_new_pack.H72VXR/_old 2017-12-21 11:29:57.569747469 +0100 +++ /var/tmp/diff_new_pack.H72VXR/_new 2017-12-21 11:29:57.573747273 +0100 @@ -1,6 +1,6 @@ ---- ./src/lib/libast/features/lib -+++ ./src/lib/libast/features/lib 2014-02-17 15:26:32.488708646 +0000 -@@ -134,27 +134,6 @@ tst lib_poll_fd_1 note{ fd is first arg +--- src/lib/libast/features/lib ++++ src/lib/libast/features/lib +@@ -92,27 +92,6 @@ } }end @@ -28,11 +28,9 @@ exp _lib_poll _lib_poll_fd_1||_lib_poll_fd_2 tst lib_poll_notimer note{ poll with no fds ignores timeout }end execute{ ---- ./src/lib/libast/features/spawn -+++ ./src/lib/libast/features/spawn 2014-02-17 15:29:54.946324412 +0000 -@@ -6,123 +6,6 @@ lib posix_spawnattr_setfchdir,posix_spaw - - mem inheritance.pgroup spawn.h +@@ -241,120 +220,6 @@ + } + }end -tst lib_posix_spawn unistd.h stdlib.h spawn.h -Dfork=______fork note{ posix_spawn exists and it works and its worth using }end status{ - #include <sys/types.h> @@ -57,9 +55,9 @@ - posix_spawnattr_t attr; - int n; - int status; -- char* cmd[4]; +- char* cmd[3]; - char tmp[1024]; -- if (argv[2]) +- if (argv[1]) - _exit(signal(SIGHUP, SIG_DFL) != SIG_IGN); - signal(SIGHUP, SIG_IGN); - if (posix_spawnattr_init(&attr)) @@ -79,9 +77,8 @@ - } - /* first try an a.out and verify that SIGHUP is ignored */ - cmd[0] = argv[0]; -- cmd[1] = argv[1]; -- cmd[2] = "test"; -- cmd[3] = 0; +- cmd[1] = "test"; +- cmd[2] = 0; - if (posix_spawn(&pid, cmd[0], 0, &attr, cmd, 0)) - { - NOTE("posix_spawn() FAILED"); @@ -144,8 +141,6 @@ - NOTE("ENOEXEC invokes sh"); - else if (status == 0) - NOTE("ENOEXEC reports no error"); -- else -- NOTE("ENOEXEC produces non-zero exit status"); - } - _exit(n); - } ++++++ ksh93-alias-k.dif ++++++ --- /var/tmp/diff_new_pack.H72VXR/_old 2017-12-21 11:29:57.605745713 +0100 +++ /var/tmp/diff_new_pack.H72VXR/_new 2017-12-21 11:29:57.605745713 +0100 @@ -1,6 +1,6 @@ --- src/cmd/ksh93/data/builtins.c -+++ src/cmd/ksh93/data/builtins.c 2014-02-19 11:05:51.494209208 +0000 -@@ -85,8 +85,8 @@ const struct shtable3 shtab_builtins[] = ++++ src/cmd/ksh93/data/builtins.c 2013-06-11 16:24:46.269439322 +0000 +@@ -78,8 +78,8 @@ const struct shtable3 shtab_builtins[] = #if _bin_newgrp || _usr_bin_newgrp "newgrp", NV_BLTIN|BLT_ENV|BLT_SPC, Bltin(login), #endif /* _bin_newgrp || _usr_bin_newgrp */ @@ -8,6 +8,6 @@ - "hash", NV_BLTIN|BLT_SPC, bltin(alias), + "alias", NV_BLTIN|BLT_SPC|BLT_DCL, bltin(alias), + "hash", NV_BLTIN|BLT_SPC|BLT_DCL, bltin(alias), + "enum", NV_BLTIN|BLT_ENV|BLT_SPC|BLT_DCL,bltin(enum), "eval", NV_BLTIN|BLT_ENV|BLT_SPC|BLT_EXIT,bltin(eval), "exit", NV_BLTIN|BLT_ENV|BLT_SPC, bltin(return), - "fc", NV_BLTIN|BLT_ENV|BLT_EXIT, bltin(hist), ++++++ ksh93-aso.dif ++++++ --- /var/tmp/diff_new_pack.H72VXR/_old 2017-12-21 11:29:57.613745323 +0100 +++ /var/tmp/diff_new_pack.H72VXR/_new 2017-12-21 11:29:57.617745128 +0100 @@ -1,6 +1,6 @@ --- src/lib/libast/features/aso -+++ src/lib/libast/features/aso 2014-02-18 13:50:32.820793960 +0000 -@@ -10,7 +10,10 @@ if aso note{ gcc 4.1+ 64 bit memory atom ++++ src/lib/libast/features/aso 2012-02-20 12:09:41.065934089 +0100 +@@ -5,7 +5,10 @@ if aso note{ gcc 4.1+ 64 bit memory atom int main() { uint64_t i = 0; @@ -11,8 +11,8 @@ + return __sync_fetch_and_add(&i,7)+__sync_fetch_and_add(&j,7)+__sync_fetch_and_add(&l,7)+__sync_fetch_and_add(&m,7); } }end && { - #define _ASO_INTRINSIC 1 -@@ -46,7 +49,9 @@ elif aso note{ gcc 4.1+ 32 bit memory at + #define _aso_cas8(p,o,n) __sync_val_compare_and_swap(p,o,n) +@@ -31,7 +34,9 @@ elif aso note{ gcc 4.1+ 32 bit memory at int main() { uint32_t i = 0; @@ -22,4 +22,4 @@ + return __sync_fetch_and_add(&i,7)+__sync_fetch_and_add(&j,7)+__sync_fetch_and_add(&l,7); } }end && { - #define _ASO_INTRINSIC 1 + #define _aso_cas8(p,o,n) __sync_val_compare_and_swap(p,o,n) ++++++ ksh93-backticks.dif -> ksh93-backtick.dif ++++++ --- /work/SRC/openSUSE:Factory/ksh/ksh93-backticks.dif 2014-08-03 15:36:20.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.ksh.new/ksh93-backtick.dif 2017-12-21 11:29:54.729885938 +0100 @@ -1,15 +1,151 @@ ---- - src/cmd/ksh93/sh/macro.c | 2 - - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- src/cmd/ksh93/sh/macro.c -+++ src/cmd/ksh93/sh/macro.c 2014-07-18 13:50:47.590235743 +0000 -@@ -2198,7 +2198,7 @@ static void comsubst(Mac_t *mp,register - mp->shp->inlineno = error_info.line+mp->shp->st.firstline; - t = (Shnode_t*)sh_parse(mp->shp, sp,SH_EOF|SH_NL); - mp->shp->inlineno = c; -- type = 1; -+ type = 3; +--- ./src/cmd/ksh93/sh/io.c.orig 2015-12-09 11:17:56.993309654 +0000 ++++ ./src/cmd/ksh93/sh/io.c 2015-12-09 11:20:10.671805470 +0000 +@@ -692,7 +692,7 @@ int sh_close(register int fd) } - #if KSHELL - if(t) + if(fd >= shp->gd->lim.open_max) + sh_iovalidfd(shp,fd); +- if(!(sp=shp->sftable[fd]) || sfclose(sp) < 0) ++ if(!(sp=shp->sftable[fd]) || sffileno(sp) != fd || sfclose(sp) < 0) + { + int err=errno; + if(fdnotify) +--- ./src/cmd/ksh93/sh/jobs.c.orig 2015-11-27 12:18:44.168204649 +0000 ++++ ./src/cmd/ksh93/sh/jobs.c 2015-11-27 14:49:54.255529119 +0000 +@@ -1630,6 +1630,8 @@ int job_wait(register pid_t pid) + } + sfsync(sfstderr); + job.waitsafe = 0; ++ if (pw && !job.savesig && shp->subshell) ++ sh_readpipedata(); + nochild = job_reap(job.savesig); + if(job.waitsafe) + continue; +--- ./src/cmd/ksh93/sh/macro.c.orig 2015-08-11 12:00:52.454212675 +0000 ++++ ./src/cmd/ksh93/sh/macro.c 2015-11-27 14:02:27.493074974 +0000 +@@ -2183,7 +2183,7 @@ static void comsubst(Mac_t *mp,register + stkseek(stkp,soff+foff+64); + stkseek(stkp,soff); + } +- if(foff > IOBSIZE) ++ if(sffileno(sp)>=0 && foff>(Sfoff_t)IOBSIZE) + sfsetbuf(sp,NULL,SF_UNBOUND); + while((str=(char*)sfreserve(sp,SF_UNBOUND,0)) && (c=bufsize=sfvalue(sp))>0) + { +--- ./src/cmd/ksh93/sh/subshell.c.orig 2015-08-11 11:59:29.030528394 +0000 ++++ ./src/cmd/ksh93/sh/subshell.c 2015-12-09 11:20:38.614700038 +0000 +@@ -105,11 +105,23 @@ static struct subshell + #if SHOPT_COSHELL + void *coshell; + #endif /* SHOPT_COSHELL */ ++ char *pipedata; ++ size_t pipedatalen; + } *subshell_data; + + static long subenv; + + ++static void sh_addtopipedata(struct subshell *sp, void *buf, size_t len) ++{ ++ if (!sp->pipedata) ++ sp->pipedata = malloc(len); ++ else ++ sp->pipedata = realloc(sp->pipedata, sp->pipedatalen + len); ++ memcpy(sp->pipedata + sp->pipedatalen, buf, len); ++ sp->pipedatalen += len; ++} ++ + /* + * This routine will turn the sftmp() file into a real /tmp file or pipe + * if the /tmp file create fails +@@ -146,7 +158,7 @@ void sh_subtmpfile(Shell_t *shp) + sh_fcntl(sp->pipefd,F_SETFD,FD_CLOEXEC); + /* write the data to the pipe */ + if(off = sftell(sfstdout)) +- write(fds[1],sfsetbuf(sfstdout,(Void_t*)sfstdout,0),(size_t)off); ++ sh_addtopipedata(sp, sfsetbuf(sfstdout,(Void_t*)sfstdout,0),(size_t)off); + sfclose(sfstdout); + if((sh_fcntl(fds[1],F_DUPFD, 1)) != 1) + errormsg(SH_DICT,ERROR_system(1),e_file+4); +@@ -173,6 +185,50 @@ void sh_subtmpfile(Shell_t *shp) + } + } + ++void sh_readpipedata() ++{ ++ register struct subshell *sp = subshell_data; ++ fd_set rfd; ++ if (sp) ++ sp = sp->pipe; ++ if (!sp || sp->pipefd < 0 || sp->pipefd >= FD_SETSIZE) ++ return; ++ sigset_t sigsaved, sigchld; ++ sigemptyset(&sigchld); ++ sigaddset(&sigchld, SIGCHLD); ++ /* block sigchild */ ++ sigprocmask(SIG_BLOCK, &sigchld, &sigsaved); ++ FD_ZERO(&rfd); ++ FD_SET(sp->pipefd, &rfd); ++ while (!job.savesig) { ++ int i = pselect(sp->pipefd + 1, &rfd, 0, 0, 0, &sigsaved); ++ if (i > 0) { ++ char buf[4096]; ++ i = read(sp->pipefd, buf, 4096); ++ if (i == 0 || (i < 0 && errno != EINTR)) ++ break; ++ sh_addtopipedata(sp, buf, i); ++ } ++ } ++ sigprocmask(SIG_SETMASK, &sigsaved, 0); ++} ++ ++void sh_emptypipe(struct subshell *sp, int pipefd) ++{ ++ int i; ++ char buf[4096]; ++ if (!sp || pipefd < 0) ++ return; ++ for (;;) { ++ i = read(pipefd, buf, 4096); ++ if (i < 0 && errno == EINTR) ++ continue; ++ if (i <= 0) ++ break; ++ sh_addtopipedata(sp, buf, i); ++ } ++} ++ + + /* + * This routine creates a temp file if necessary and creates a subshell. +@@ -614,7 +670,7 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_ + sp->tmpfd = -1; + sp->pipefd = -1; + /* use sftmp() file for standard output */ +- if(!(iop = sftmp(comsub==1?PIPE_BUF:IOBSIZE))) ++ if(!(iop = sftmp(comsub==1?SF_UNBOUND:IOBSIZE))) + { + sfswap(sp->saveout,sfstdout); + errormsg(SH_DICT,ERROR_system(1),e_tmpcreate); +@@ -822,6 +878,22 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_ + sh_argfree(shp,argsav,0); + if(shp->topfd != buff.topfd) + sh_iorestore(shp,buff.topfd|IOSUBSHELL,jmpval); ++ ++ /* empty the pipe and move all data into iop */ ++ if (comsub && sp->pipefd>=0) ++ { ++ sh_emptypipe(sp, sffileno(iop)); ++ sfclose(iop); ++ sp->pipefd = -1; ++ iop = sftmp(SF_UNBOUND); ++ if (sp->pipedatalen) ++ sfwrite(iop, sp->pipedata, sp->pipedatalen); ++ if (sp->pipedata) ++ free(sp->pipedata); ++ sp->pipedata = 0; ++ sp->pipedatalen = 0; ++ } ++ + if(sp->sig) + { + if(sp->prev) ++++++ ksh93-builtin.dif ++++++ --- /var/tmp/diff_new_pack.H72VXR/_old 2017-12-21 11:29:57.641743958 +0100 +++ /var/tmp/diff_new_pack.H72VXR/_new 2017-12-21 11:29:57.641743958 +0100 @@ -1,20 +1,6 @@ --- src/cmd/builtin/pty.c -+++ src/cmd/builtin/pty.c 2014-02-18 14:37:47.047276323 +0000 -@@ -113,6 +113,13 @@ USAGE_LICENSE - #include <sys/stat.h> - #include "FEATURE/pty" - -+#ifdef __linux__ -+# if !_lib_openpty -+# undef _lib_openpty -+# define _lib_openpty 1 -+# endif -+#endif -+ - #define MODE_666 (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH) - #define MAXNAME 64 - -@@ -216,27 +223,59 @@ mkpty(int* master, int* slave) ++++ src/cmd/builtin/pty.c 2013-02-01 15:59:52.697952156 +0000 +@@ -216,27 +216,64 @@ mkpty(int* master, int* slave) #if !_lib_openpty char* sname; #endif @@ -30,7 +16,7 @@ */ - alarm(4); -- if (tcgetattr(sffileno(sfstderr), &tty) >= 0) +- if (tcgetattr(STDERR_FILENO, &tty) >= 0) - ttyp = &tty; - else + alarm(6); @@ -60,10 +46,9 @@ + cfsetispeed(&tty, B38400); + cfsetospeed(&tty, B38400); +#endif -+ ttyp = &tty; -+ ++ ttyp = &tty; #ifdef TIOCGWINSZ -- if (ioctl(sffileno(sfstderr), TIOCGWINSZ, &win) >= 0) +- if (ioctl(STDERR_FILENO, TIOCGWINSZ, &win) >= 0) - winp = &win; - else + if (ioctl(sffileno(sfstderr), TIOCGWINSZ, &win) < 0) @@ -80,10 +65,16 @@ + if (win.ws_col < 80) + win.ws_col = 80; + winp = &win; ++#endif ++#ifdef __linux__ ++# if !_lib_openpty ++# undef _lib_openpty ++# define _lib_openpty 1 ++# endif #endif #if _lib_openpty if (openpty(master, slave, NULL, ttyp, winp) < 0) -@@ -279,6 +318,9 @@ mkpty(int* master, int* slave) +@@ -279,6 +316,9 @@ mkpty(int* master, int* slave) #if !O_cloexec fcntl(*slave, F_SETFD, FD_CLOEXEC); #endif @@ -93,8 +84,89 @@ alarm(0); return 0; } +@@ -317,9 +357,13 @@ process(Sfio_t* mp, Sfio_t* lp, int dela + char* s; + Sfio_t* ip; + Sfio_t* sps[2]; ++ struct stat dst; ++ struct stat fst; + + ip = sfstdin; +- for (;;) ++ if (!fstat(sffileno(ip), &dst) && !stat("/dev/null", &fst) && dst.st_dev == fst.st_dev && dst.st_ino == fst.st_ino) ++ ip = 0; ++ do + { + i = 0; + t = timeout; +@@ -336,39 +380,39 @@ process(Sfio_t* mp, Sfio_t* lp, int dela + { + if (n < 0) + error(ERROR_SYSTEM|2, "poll failed"); +- if (t < 0) +- break; ++ break; + } +- else +- for (i = 0; i < n; i++) ++ for (i = t = 0; i < n; i++) ++ { ++ if (!(sfvalue(sps[i]) & SF_READ)) ++ /*skip*/; ++ else if (sps[i] == mp) + { +- if (!(sfvalue(sps[i]) & SF_READ)) +- /*skip*/; +- else if (sps[i] == mp) ++ t++; ++ if (!(s = (char*)sfreserve(mp, SF_UNBOUND, -1))) + { +- if (!(s = (char*)sfreserve(mp, SF_UNBOUND, -1))) +- { +- sfclose(mp); +- mp = 0; +- } +- else if ((r = sfvalue(mp)) > 0 && (sfwrite(sfstdout, s, r) != r || sfsync(sfstdout))) +- { +- error(ERROR_SYSTEM|2, "output write failed"); +- goto done; +- } ++ sfclose(mp); ++ mp = 0; + } +- else ++ else if ((r = sfvalue(mp)) > 0 && (sfwrite(sfstdout, s, r) != r || sfsync(sfstdout))) + { +- if (!(s = sfgetr(ip, '\n', 1))) +- ip = 0; +- else if (sfputr(mp, s, '\r') < 0 || sfsync(mp)) +- { +- error(ERROR_SYSTEM|2, "write failed"); +- goto done; +- } ++ error(ERROR_SYSTEM|2, "output write failed"); ++ goto done; + } + } +- } ++ else ++ { ++ t++; ++ if (!(s = sfgetr(ip, '\n', 1))) ++ ip = 0; ++ else if (sfputr(mp, s, '\r') < 0 || sfsync(mp)) ++ { ++ error(ERROR_SYSTEM|2, "write failed"); ++ goto done; ++ } ++ } ++ } ++ } while (t); + done: + if (mp) + sfclose(mp); --- src/cmd/builtin/what.c -+++ src/cmd/builtin/what.c 2014-02-18 14:29:07.979144811 +0000 ++++ src/cmd/builtin/what.c 2012-02-13 11:02:18.645933606 +0000 @@ -68,7 +68,7 @@ static struct int match; int single; ++++++ ksh93-cdpwd.dif ++++++ --- ./src/cmd/ksh93/bltins/cd_pwd.c.orig 2014-11-13 16:07:38.336318883 +0000 +++ ./src/cmd/ksh93/bltins/cd_pwd.c 2014-11-13 16:24:53.323415375 +0000 @@ -116,9 +116,14 @@ int b_cd(int argc, char *argv[],Shbltin_ char *sp; for(dp=dir; *dp=='.'; dp++) { - if(*++dp=='.' && (*++dp=='/' || *dp==0)) + if (dp[1]=='.' && (dp[2]=='/' || dp[2]==0)) + { n++; - else if(*dp && *dp!='/') + dp += 2; + } + else if (dp[1]=='/' || dp[1]==0) + dp++; + else break; if(*dp==0) break; ++++++ ksh93-compat.dif ++++++ --- /var/tmp/diff_new_pack.H72VXR/_old 2017-12-21 11:29:57.657743177 +0100 +++ /var/tmp/diff_new_pack.H72VXR/_new 2017-12-21 11:29:57.657743177 +0100 @@ -1,6 +1,6 @@ --- src/lib/libast/astsa/ast.h -+++ src/lib/libast/astsa/ast.h 2014-02-17 16:21:31.627048693 +0000 -@@ -100,6 +100,12 @@ typedef struct ++++ src/lib/libast/astsa/ast.h 2012-02-21 12:03:33.000000000 +0000 +@@ -93,6 +93,12 @@ typedef struct #define pointerof(x) ((void*)((char*)0+(x))) #define roundof(x,y) (((x)+(y)-1)&~((y)-1)) @@ -14,20 +14,18 @@ #define offsetof(type,member) ((unsigned long)&(((type*)0)->member)) #endif --- src/lib/libast/features/libpath.sh -+++ src/lib/libast/features/libpath.sh 2014-02-18 11:00:22.655840483 +0000 -@@ -21,8 +21,8 @@ ++++ src/lib/libast/features/libpath.sh 2007-03-30 16:45:55.000000000 +0000 +@@ -21,7 +21,7 @@ ######################################################################## ok=0 for i in \ - -x /lib/ld.so /lib/ld-*.so /usr/lib/ld.so /lib/rld \ -- -f /usr/shlib/libc.so /shlib/libc.so /usr/lib/libc.so \ + -x /lib64/ld.so /lib/ld.so /lib64/ld-*.so /lib/ld-*.so /usr/lib/ld.so /lib/rld \ -+ -f /usr/shlib/libc.so /shlib/libc.so /usr/lib/libc.so /usr/lib64/libc.so \ - -r /usr/shlib/libc.so /shlib/libc.so \ - -x /lib*/*ld*.so* + -f /usr/shlib/libc.so /shlib/libc.so /usr/lib/libc.so \ + -r /usr/shlib/libc.so /shlib/libc.so do case $i in --- src/lib/libast/features/map.c -+++ src/lib/libast/features/map.c 2014-02-17 16:21:31.627048693 +0000 ++++ src/lib/libast/features/map.c 2009-12-09 11:13:24.000000000 +0000 @@ -67,10 +67,14 @@ main() #define _map_malloc 1 printf("\n"); @@ -44,8 +42,8 @@ printf("#undef eaccess\n"); printf("#define eaccess _ast_eaccess\n"); --- src/lib/libast/features/sys -+++ src/lib/libast/features/sys 2014-02-17 16:21:31.627048693 +0000 -@@ -139,7 +139,7 @@ tst typ_signed_size_t output{ ++++ src/lib/libast/features/sys 2012-02-21 12:04:43.000000000 +0000 +@@ -134,7 +134,7 @@ tst typ_signed_size_t output{ } }end @@ -55,7 +53,7 @@ define EXIT_SUCCESS 0 define MB_CUR_MAX 1 --- src/lib/libdll/features/dll -+++ src/lib/libdll/features/dll 2014-02-17 16:21:31.627048693 +0000 ++++ src/lib/libdll/features/dll 2007-03-30 16:40:59.000000000 +0000 @@ -15,7 +15,7 @@ tst dll_DYNAMIC link{ }end tst run{ ++++++ ksh93-disable-vfork.dif ++++++ --- src/lib/libast/features/lib.orig 2014-11-19 13:03:58.009305098 +0000 +++ src/lib/libast/features/lib 2014-11-19 13:23:05.010183379 +0000 @@ -221,7 +221,7 @@ tst lib_vfork unistd.h stdlib.h vfork.h _exit(2); } status = 1; - _exit(wait(&status) < 0 || status != 0); + _exit(wait(&status) < 0 || status != 0 || 1); } }end ++++++ ksh93-dttree-crash.dif ++++++ ++++ 960 lines (skipped) ++++++ ksh93-edpredict.dif ++++++ --- src/cmd/ksh93/edit/edit.c.orig 2016-02-18 10:33:20.604776826 +0000 +++ src/cmd/ksh93/edit/edit.c 2016-02-18 10:34:02.019627077 +0000 @@ -628,8 +628,8 @@ void ed_setup(register Edit_t *ep, int f ep->hoff = 0; #endif /* SHOPT_EDPREDICT */ #if KSHELL - ep->e_stkptr = stakptr(0); ep->e_stkoff = staktell(); + ep->e_stkptr = stakfreeze(0); if(!(last = shp->prompt)) last = ""; shp->prompt = 0; --- src/cmd/ksh93/edit/emacs.c.orig 2016-02-18 10:33:27.144753171 +0000 +++ src/cmd/ksh93/edit/emacs.c 2016-02-18 10:34:33.289514039 +0000 @@ -721,10 +721,8 @@ process: draw(ep,FINAL); tty_cooked(ERRIO); if(ed->e_nlist) - { ed->e_nlist = 0; - stakset(ed->e_stkptr,ed->e_stkoff); - } + stakset(ed->e_stkptr,ed->e_stkoff); if(c == '\n') { out[eol++] = '\n'; --- src/cmd/ksh93/edit/vi.c.orig 2016-02-18 10:33:35.772722001 +0000 +++ src/cmd/ksh93/edit/vi.c 2016-02-18 10:36:15.506143712 +0000 @@ -608,10 +608,8 @@ int ed_viread(void *context, int fd, reg /* to cause the shell to process the line */ tty_cooked(ERRIO); if(ed->e_nlist) - { ed->e_nlist = 0; - stakset(ed->e_stkptr,ed->e_stkoff); - } + stakset(ed->e_stkptr,ed->e_stkoff); if( vp->addnl ) { virtual[++last_virt] = '\n'; ++++++ ksh93-env.dif ++++++ --- /var/tmp/diff_new_pack.H72VXR/_old 2017-12-21 11:29:57.681742007 +0100 +++ /var/tmp/diff_new_pack.H72VXR/_new 2017-12-21 11:29:57.685741812 +0100 @@ -1,6 +1,17 @@ +--- src/cmd/ksh93/sh/init.c ++++ src/cmd/ksh93/sh/init.c 2013-02-15 13:29:57.129444048 +0000 +@@ -336,6 +336,8 @@ static void put_restricted(register Namv + int path_scoped = 0, fpath_scoped=0; + Pathcomp_t *pp; + char *name = nv_name(np); ++ if (!shp) ++ shp = sh_getinterp(); + if(!(flags&NV_RDONLY) && sh_isoption(SH_RESTRICTED)) + errormsg(SH_DICT,ERROR_exit(1),e_restricted,nv_name(np)); + if(np==PATHNOD || (path_scoped=(strcmp(name,PATHNOD->nvname)==0))) --- src/cmd/ksh93/sh/name.c +++ src/cmd/ksh93/sh/name.c 2012-10-16 12:12:43.000000000 +0000 -@@ -2264,7 +2264,7 @@ static void attstore(register Namval_t * +@@ -2162,7 +2162,7 @@ static void attstore(register Namval_t * if((flag&(NV_UTOL|NV_LTOU|NV_INTEGER)) == (NV_UTOL|NV_LTOU)) { data = (void*)nv_mapchar(np,0); ++++++ ksh93-fdstatus.dif ++++++ ++++ 1631 lines (skipped) ++++++ ksh93-filedefined.dif ++++++ --- ./src/lib/libast/features/stdio.orig 2017-12-20 12:15:45.571650029 +0000 +++ ./src/lib/libast/features/stdio 2017-12-20 12:16:26.250531883 +0000 @@ -6,6 +6,8 @@ cat{ #define _FILE_DEFINED 1 #define _FILE_defined 1 #define _FILEDEFED 1 + #define __FILE_defined 1 + #define ____FILE_defined 1 #ifndef __FILE_TAG #define __FILE_TAG _sfio_s --- ./src/lib/libast/include/ast.h.orig 2017-12-20 12:16:37.212500201 +0000 +++ ./src/lib/libast/include/ast.h 2017-12-20 12:17:25.635360669 +0000 @@ -58,9 +58,21 @@ struct _sfio_s; #ifndef __FILE_typedef #define __FILE_typedef 1 #endif +#ifndef _FILE_DEFINED +#define _FILE_DEFINED 1 +#endif +#ifndef _FILE_defined +#define _FILE_defined 1 +#endif #ifndef _FILEDEFED #define _FILEDEFED 1 #endif +#ifndef __FILE_defined +#define __FILE_defined 1 +#endif +#ifndef ____FILE_defined +#define ____FILE_defined 1 +#endif #endif /* ++++++ ksh93-foreground-prgrp.dif ++++++ --- /var/tmp/diff_new_pack.H72VXR/_old 2017-12-21 11:29:57.717740252 +0100 +++ /var/tmp/diff_new_pack.H72VXR/_new 2017-12-21 11:29:57.717740252 +0100 @@ -1,13 +1,13 @@ --- src/cmd/ksh93/sh/jobs.c -+++ src/cmd/ksh93/sh/jobs.c 2014-02-18 14:28:42.330940622 +0000 -@@ -894,7 +894,9 @@ static void job_reset(register struct pr - Shell_t *shp = pw->p_shp; ++++ src/cmd/ksh93/sh/jobs.c 2012-02-08 10:52:14.000000000 +0000 +@@ -845,7 +845,9 @@ static void job_reset(register struct pr + { /* save the terminal state for current job */ #ifdef SIGTSTP - job_fgrp(pw,tcgetpgrp(job.fd)); + pid_t tgrp; + if((tgrp=tcgetpgrp(job.fd))!=job.mypid) + job_fgrp(pw,tgrp); - if(sh_isoption(shp,SH_INTERACTIVE) && tcsetpgrp(job.fd,job.mypid) !=0) + if(tcsetpgrp(job.fd,job.mypid) !=0) return; #endif /* SIGTSTP */ ++++++ ksh93-fs3d.dif ++++++ --- /var/tmp/diff_new_pack.H72VXR/_old 2017-12-21 11:29:57.725739862 +0100 +++ /var/tmp/diff_new_pack.H72VXR/_new 2017-12-21 11:29:57.729739667 +0100 @@ -1,65 +1,62 @@ -2013-10-17 10:30:20 - wer...@suse.de - -Found by debugging with valgrind and environment variable LD_LIBRARY_PATH that -the mount() system call function from the glibc is used instead of a fs3d_mount() -function. To avoid this make fs3d_mount() a weak symbol to be overloadable by -a shared library function and make the stub function return -1 for not configured -file system type. - ---- src/lib/libast/misc/fs3d.c -+++ src/lib/libast/misc/fs3d.c 2013-10-17 10:30:20.000000000 +0000 -@@ -28,6 +28,20 @@ - * only active for non-shared 3d library - */ - -+#if defined(__linux__) && defined(__GNUC__) -+# if defined __USE_ISOC99 -+# define _cat_pragma(exp) _Pragma(#exp) -+# define _weak_pragma(exp) _cat_pragma(weak name) -+# else -+# define _weak_pragma(exp) -+# endif -+# define _declare(name,sym) __extension__ extern __typeof__(sym) name -+# define weak_symbol(sym) _weak_pragma(name) _declare(sym,sym) __attribute__((__weak__)) -+# include <error.h> -+#else -+# define weak_symbol(sym) -+#endif -+ - #define mount ______mount - - #include <ast.h> -@@ -35,6 +49,7 @@ - #undef mount - - #include <fs3d.h> -+weak_symbol(fs3d_mount); - +--- ./src/lib/libast/misc/fs3d.c.orig 2014-11-11 12:09:50.142397030 +0000 ++++ ./src/lib/libast/misc/fs3d.c 2014-11-11 12:11:19.667992242 +0000 +@@ -39,6 +39,7 @@ int fs3d(register int op) -@@ -102,11 +117,18 @@ fs3d(register int op) - * user code that includes <fs3d.h> will have mount() mapped to fs3d_mount() - * this restricts the various "standard" mount prototype conflicts to this spot - * this means that code that includes <fs3d.h> cannot access the real mount -- * (at least without some additional macro hackery -+ * (at least without some additional macro hackery) - */ + { ++#if SHOPT_FS_3D + register int cur; + register char* v; + char val[sizeof(FS3D_off) + 8]; +@@ -95,6 +96,7 @@ fs3d(register int op) + return cur; + nope: + fsview = -1; ++#endif + return 0; + } + +@@ -107,6 +109,7 @@ fs3d(register int op) #undef mount -- -+#if defined(__linux__) && defined(__GNUC__) -+int __attribute__((__noinline__)) -+fs3d_mount(const char* source, char* target, int flags, void* data) -+{ -+ errno = ENODEV; -+ return -1; -+} -+#else + ++#if SHOPT_FS_3D extern int mount(const char*, char*, int, void*); int -@@ -114,3 +136,4 @@ fs3d_mount(const char* source, char* tar +@@ -114,3 +117,4 @@ fs3d_mount(const char* source, char* tar { return mount(source, target, flags, data); } +#endif +--- ./src/lib/libast/path/pathkey.c.orig 2014-11-11 12:11:29.333948438 +0000 ++++ ./src/lib/libast/path/pathkey.c 2014-11-11 12:11:47.067868209 +0000 +@@ -109,8 +109,10 @@ pathkey_20100601(const char* lang, const + * 3D + */ + ++#if SHOPT_FS_3D + if (!flags && fs3d(FS3D_TEST) && (c = mount(path, tmp, FS3D_GET|FS3D_ALL|FS3D_SIZE(PATH_MAX), NiL)) > 1 && c < PATH_MAX) + path = tmp; ++#endif + + /* + * preroot +--- ./src/lib/libcoshell/coinit.c.orig 2014-11-11 12:08:49.438671153 +0000 ++++ ./src/lib/libcoshell/coinit.c 2014-11-11 12:09:25.956506292 +0000 +@@ -355,6 +355,7 @@ coinitialize(Coshell_t* co, int flags) + p = (int)sfstrtell(sp); + sfprintf(sp, "vpath "); + n = PATH_MAX; ++#if SHOPT_FS_3D + if (fs3d(FS3D_TEST)) + for (;;) + { +@@ -370,6 +371,7 @@ coinitialize(Coshell_t* co, int flags) + } + } + else ++#endif + { + m = 0; + sfprintf(sp, "- /#option/2d"); ++++++ ksh93-gcc.dif ++++++ --- /var/tmp/diff_new_pack.H72VXR/_old 2017-12-21 11:29:57.741739082 +0100 +++ /var/tmp/diff_new_pack.H72VXR/_new 2017-12-21 11:29:57.741739082 +0100 @@ -1,3 +1,27 @@ +--- src/lib/libast/misc/optget.c ++++ src/lib/libast/misc/optget.c 2013-01-28 14:52:53.000000000 +0000 +@@ -4367,9 +4367,9 @@ optget(register char** argv, const char* + */ + + opt_info.assignment = 0; +- num = 1; +- w = v = 0; +- x = 0; ++ nov = no = num = 1; ++ e = w = v = 0; ++ n = x = 0; + for (;;) + { + if (!opt_info.offset) +@@ -5214,7 +5214,7 @@ optget(register char** argv, const char* + + if (opt_info.num != LONG_MIN) + opt_info.num = (long)(opt_info.number = num); +- if ((n = *++s == '#') || *s == ':' || w && !nov && v && (optnumber(v, &e, NiL), n = !*e)) ++ if ((n = (*++s == '#')) || *s == ':' || w && !nov && v && (optnumber(v, &e, NiL), n = !*e)) + { + if (w) + { --- src/lib/libpp/ppsearch.c +++ src/lib/libpp/ppsearch.c 2012-03-14 11:40:11.000000000 +0000 @@ -107,6 +107,14 @@ ppmultiple(register struct ppfile* fp, r @@ -39,39 +63,3 @@ /* * search for an include file * if (flags&SEARCH_INCLUDE) then ---- src/lib/libcmd/ls.c -+++ src/lib/libcmd/ls.c 2014-02-20 11:11:51.762689002 +0000 -@@ -1257,7 +1257,7 @@ ls(State_t* state, register FTSENT* ent) - if (!VISIBLE(state, ent)) - { - fts_set(NiL, ent, FTS_SKIP); -- return; -+ return 0; - } - switch (ent->fts_info) - { -@@ -1265,12 +1265,12 @@ ls(State_t* state, register FTSENT* ent) - if (ent->fts_parent->fts_info == FTS_DNX) - break; - error(2, "%s: not found", ent->fts_path); -- return; -+ return 0; - case FTS_DC: - if (state->lsflags & LS_DIRECTORY) - break; - error(2, "%s: directory causes cycle", ent->fts_path); -- return; -+ return 0; - case FTS_DNR: - if (state->lsflags & LS_DIRECTORY) - break; ---- src/lib/libcmd/xargs.c -+++ src/lib/libcmd/xargs.c 2014-02-20 11:23:40.348375000 +0000 -@@ -116,6 +116,7 @@ run(int argc, char** argv, Cmddisc_t* di - { - if (((Xargs_t*)disc)->context) - return sh_run(((Xargs_t*)disc)->context, argc, argv); -+ return(argc); - } - - int ++++++ ksh93-heredoc.dif ++++++ --- /var/tmp/diff_new_pack.H72VXR/_old 2017-12-21 11:29:57.753738497 +0100 +++ /var/tmp/diff_new_pack.H72VXR/_new 2017-12-21 11:29:57.757738302 +0100 @@ -1,6 +1,6 @@ --- src/cmd/ksh93/sh/lex.c +++ src/cmd/ksh93/sh/lex.c 2012-01-16 15:09:38.000000000 +0000 -@@ -1916,6 +1916,8 @@ static int here_copy(Lex_t *lp,register +@@ -1893,6 +1893,8 @@ static int here_copy(Lex_t *lp,register sfputc(sp,'\\'); } } ++++++ ksh93-heredoclex.dif ++++++ --- src/cmd/ksh93/sh/lex.c +++ src/cmd/ksh93/sh/lex.c 2013-02-26 12:21:11.618820739 +0100 @@ -1559,6 +1559,7 @@ static int comsub(register Lex_t *lp, in register int line=lp->sh->inlineno; char *first,*cp=fcseek(0),word[5]; int off, messages=0, assignok=lp->assignok, csub; + struct ionod *inheredoc = lp->heredoc; struct lexstate save; save = lp->lex; csub = lp->comsub; @@ -1683,7 +1684,7 @@ done: lp->lexd.dolparen--; lp->lex = save; lp->assignok = (endchar(lp)==RBRACT?assignok:0); - if(lp->heredoc) + if(lp->heredoc && !inheredoc) errormsg(SH_DICT,ERROR_exit(SYNBAD),e_lexsyntax5,lp->sh->inlineno,lp->heredoc->ioname); return(messages); } ++++++ ksh93-ia64.dif ++++++ --- /var/tmp/diff_new_pack.H72VXR/_old 2017-12-21 11:29:57.781737132 +0100 +++ /var/tmp/diff_new_pack.H72VXR/_new 2017-12-21 11:29:57.781737132 +0100 @@ -1,26 +1,26 @@ --- src/cmd/ksh93/features/math.sh -+++ src/cmd/ksh93/features/math.sh 2014-02-18 12:40:44.891530835 +0000 -@@ -141,6 +141,18 @@ echo "#include <math.h>" ++++ src/cmd/ksh93/features/math.sh 2012-01-20 14:23:38.000000000 +0000 +@@ -130,6 +130,18 @@ echo "#include <math.h>" case $_hdr_ieeefp in 1) echo "#include <ieeefp.h>" ;; esac +cat <<! +#if defined(__ia64__) && defined(signbit) +# if defined __GNUC__ && __GNUC__ >= 4 -+# define __signbitl(f) __builtin_signbitl(f) ++# define __signbitl(f) __builtin_signbitl(f) +# else +# include <ast_float.h> +# if _lib_copysignl -+# define __signbitl(f) (int)(copysignl(1.0,(f))<0.0) ++# define __signbitl(f) (int)(copysignl(1.0,(f))<0.0) +# endif +# endif +#endif +! + echo : generate the intercept functions and table entries - --- src/lib/libast/sfio/sfcvt.c -+++ src/lib/libast/sfio/sfcvt.c 2014-02-18 12:38:56.090667053 +0000 ++++ src/lib/libast/sfio/sfcvt.c 2013-02-01 17:13:48.305452072 +0000 @@ -54,6 +54,16 @@ static char *Zero = "0"; #endif #endif ++++++ ksh93-int16double.dif ++++++ --- src/cmd/ksh93/sh/array.c.orig 2015-04-01 11:26:36.544797902 +0000 +++ src/cmd/ksh93/sh/array.c 2015-04-01 11:27:01.414692760 +0000 @@ -592,7 +592,7 @@ static char *array_getval(Namval_t *np, return(cp); } #if SHOPT_FIXEDARRAY - if(ap->fixed && nv_isattr(np,NV_INT16P) == NV_INT16) + if(ap->fixed && nv_isattr(np,NV_INT16P|NV_DOUBLE) == NV_INT16) np->nvalue.s = *np->nvalue.sp; #endif /* SHOPT_FIXEDARRAY */ return(nv_getv(np,&ap->hdr)); --- src/cmd/ksh93/sh/name.c.orig 2015-04-01 11:25:38.049045236 +0000 +++ src/cmd/ksh93/sh/name.c 2015-04-01 11:25:55.169972879 +0000 @@ -1647,7 +1647,7 @@ void nv_putval(register Namval_t *np, co return; } up= &np->nvalue; - if(nv_isattr(np,NV_INT16P) == NV_INT16) + if(nv_isattr(np,NV_INT16P|NV_DOUBLE) == NV_INT16) { if(!np->nvalue.up || !nv_isarray(np)) { ++++++ ksh93-joblock.dif ++++++ --- ./src/cmd/ksh93/include/jobs.h.orig 2014-11-19 14:14:36.055335722 +0000 +++ ./src/cmd/ksh93/include/jobs.h 2014-11-19 14:16:12.275918218 +0000 @@ -33,6 +33,7 @@ # include <signal.h> #endif /* !SIGINT */ #include "FEATURE/options" +#include <aso.h> #if SHOPT_COSHELL # include <coshell.h> @@ -150,16 +151,13 @@ extern struct jobs job; #define vmbusy() 0 #endif -#define job_lock() (job.in_critical++) +#define job_lock() asoincint(&job.in_critical) #define job_unlock() \ do { \ int _sig; \ - if (!--job.in_critical && (_sig = job.savesig)) \ - { \ - if (!job.in_critical++ && !vmbusy()) \ - job_reap(_sig); \ - job.in_critical--; \ - } \ + if (asogetint(&job.in_critical) == 1 && (_sig = job.savesig) && !vmbusy()) \ + job_reap(_sig); \ + asodecint(&job.in_critical); \ } while(0) extern const char e_jobusage[]; ++++++ ksh93-jobs.dif ++++++ --- src/cmd/ksh93/sh/jobs.c +++ src/cmd/ksh93/sh/jobs.c 2012-12-20 13:33:28.000000000 +0000 @@ -638,12 +638,14 @@ void job_init(Shell_t *shp, int lflag) /* This should have already been done by rlogin */ register int fd; register char *ttynam; + int err = errno; #ifndef SIGTSTP setpgid(0,shp->gd->pid); #endif /*SIGTSTP */ if(job.mypgid<0 || !(ttynam=ttyname(JOBTTY))) return; - close(JOBTTY); + while(close(JOBTTY)<0 && errno==EINTR) + errno = err; if((fd = open(ttynam,O_RDWR)) <0) return; if(fd!=JOBTTY) @@ -1110,7 +1112,7 @@ static struct process *job_bystring(regi int job_kill(register struct process *pw,register int sig) { - Shell_t *shp = pw->p_shp; + Shell_t *shp; register pid_t pid; register int r; const char *msg; @@ -1123,6 +1125,7 @@ int job_kill(register struct process *pw errno = ECHILD; if(pw==0) goto error; + shp = pw->p_shp; pid = pw->p_pid; #if SHOPT_COSHELL if(pw->p_cojob) ++++++ ksh93-jpold.dif ++++++ --- src/cmd/ksh93/sh/jobs.c.orig 2015-09-15 15:56:08.902265877 +0000 +++ src/cmd/ksh93/sh/jobs.c 2015-09-15 15:57:00.866122451 +0000 @@ -1981,6 +1981,7 @@ again: { count = bp->count; jp = bp->list; + jpold = 0; goto again; } if(jp) ++++++ ksh93-limit-name-len.dif ++++++ --- /var/tmp/diff_new_pack.H72VXR/_old 2017-12-21 11:29:57.825734986 +0100 +++ /var/tmp/diff_new_pack.H72VXR/_new 2017-12-21 11:29:57.825734986 +0100 @@ -9,3 +9,23 @@ const char* description; int index; const char* conf; +--- src/cmd/ksh93/sh/init.c ++++ src/cmd/ksh93/sh/init.c 2013-02-01 15:53:58.733952540 +0000 +@@ -170,7 +170,7 @@ struct match + char *val; + char *rval[2]; + regoff_t *match; +- char node[NV_MINSZ+sizeof(char*)]; ++ char node[NV_MINSZ+sizeof(char*)+sizeof(Dtlink_t)]; + regoff_t first; + int vsize; + int nmatch; +@@ -766,7 +766,7 @@ static int hasgetdisc(register Namfun_t + void sh_setmatch(Shell_t *shp,const char *v, int vsize, int nmatch, regoff_t match[],int index) + { + struct match *mp = &ip->SH_MATCH_init; +- Namval_t *np = nv_namptr(mp->node,0); ++ Namval_t *np = (Namval_t*)(&(mp->node[0])); + register int i,n,x, savesub=shp->subshell; + Namarr_t *ap = nv_arrayptr(SH_MATCHNOD); + shp->subshell = 0; ++++++ ksh93-longenv.dif ++++++ --- ./src/cmd/ksh93/include/defs.h.orig 2014-11-13 16:34:43.395195739 +0000 +++ ./src/cmd/ksh93/include/defs.h 2014-11-13 16:38:37.944297333 +0000 @@ -162,8 +162,8 @@ struct shared Namval_t *prev_table; /* previous table used in nv_open */ \ Sfio_t *outpool; /* ouput stream pool */ \ long timeout; /* read timeout */ \ - short curenv; /* current subshell number */ \ - short jobenv; /* subshell number for jobs */ \ + long curenv; /* current subshell number */ \ + long jobenv; /* subshell number for jobs */ \ int infd; /* input file descriptor */ \ short nextprompt; /* next prompt is PS<nextprompt> */ \ short poolfiles; \ --- ./src/cmd/ksh93/include/jobs.h.orig 2014-11-13 16:35:10.331086826 +0000 +++ ./src/cmd/ksh93/include/jobs.h 2014-11-13 16:38:53.856235814 +0000 @@ -87,7 +87,7 @@ struct process unsigned short p_exit; /* exit value or signal number */ unsigned short p_exitmin; /* minimum exit value for xargs */ unsigned short p_flag; /* flags - see below */ - int p_env; /* subshell environment number */ + long p_env; /* subshell environment number */ #ifdef JOBS off_t p_name; /* history file offset for command */ struct termios p_stty; /* terminal state for job */ --- ./src/cmd/ksh93/sh/jobs.c.orig 2014-11-13 16:36:02.050894977 +0000 +++ ./src/cmd/ksh93/sh/jobs.c 2014-11-13 16:37:09.568636499 +0000 @@ -1815,7 +1815,7 @@ static struct process *job_unpost(regist register struct process *pw; /* make sure all processes are done */ #ifdef DEBUG - sfprintf(sfstderr,"ksh: job line %4d: drop pid=%d critical=%d pid=%d env=%d\n",__LINE__,getpid(),job.in_critical,pwtop->p_pid,pwtop->p_env); + sfprintf(sfstderr,"ksh: job line %4d: drop pid=%d critical=%d pid=%d env=%ld\n",__LINE__,getpid(),job.in_critical,pwtop->p_pid,pwtop->p_env); sfsync(sfstderr); #endif /* DEBUG */ pwtop = pw = job_byjid((int)pwtop->p_job); --- ./src/cmd/ksh93/sh/subshell.c.orig 2014-11-13 16:34:53.259157199 +0000 +++ ./src/cmd/ksh93/sh/subshell.c 2014-11-13 16:38:11.440395221 +0000 @@ -107,7 +107,7 @@ static struct subshell #endif /* SHOPT_COSHELL */ } *subshell_data; -static int subenv; +static long subenv; /* @@ -183,7 +183,8 @@ void sh_subfork(void) { register struct subshell *sp = subshell_data; Shell_t *shp = sp->shp; - int curenv = shp->curenv, comsub=shp->comsub; + long curenv = shp->curenv; + int comsub=shp->comsub; pid_t pid; char *trap = shp->st.trapcom[0]; if(trap) @@ -476,7 +477,7 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_ struct subshell sub_data; register struct subshell *sp = &sub_data; int jmpval,nsig=0,duped=0; - int savecurenv = shp->curenv; + long savecurenv = shp->curenv; int savejobpgid = job.curpgid; int *saveexitval = job.exitval; int16_t subshell; ++++++ ksh93-malloc-hook.dif ++++++ --- ./src/lib/libast/vmalloc/malloc.c.orig 2014-11-19 11:51:06.992595039 +0000 +++ ./src/lib/libast/vmalloc/malloc.c 2014-11-19 12:00:22.713076989 +0000 @@ -1070,12 +1070,8 @@ extern Void_t* F1(_ast_valloc, size_t,n) #if !_UWIN -#if !_malloc_hook - #include <malloc.h> -#endif - typedef struct mallinfo Mallinfo_t; typedef struct mstats Mstats_t; ++++++ ksh93-nvtree-free.dif ++++++ --- src/cmd/ksh93/sh/nvtree.c.orig 2015-03-17 16:00:01.111718083 +0000 +++ src/cmd/ksh93/sh/nvtree.c 2015-03-17 16:00:31.560586300 +0000 @@ -1152,6 +1152,8 @@ static void put_tree(register Namval_t * nv_putv(np, val, flags,fp); if(val && nv_isattr(np,(NV_INTEGER|NV_BINARY))) return; + if (!val && !np->nvfun) + return; if(ap= nv_arrayptr(np)) nleft = array_elem(ap); if(nleft==0) ++++++ ksh93-optimizeleak.dif ++++++ --- ./src/cmd/ksh93/sh/name.c.orig 2016-06-01 13:09:29.754690694 +0000 +++ ./src/cmd/ksh93/sh/name.c 2016-06-01 13:09:53.348690652 +0000 @@ -2726,6 +2726,12 @@ void nv_optimize(Namval_t *np) } if((xp= (struct optimize*)fp) && xp->ptr==shp->argaddr) return; + if (xp && xp->next) { + register struct optimize *xpn; + for (xpn = xp->next; xpn; xpn = xpn->next) + if (xpn->ptr == shp->argaddr && xpn->np == np) + return; + } if(op = opt_free) opt_free = op->next; else ++++++ ksh93-path-skip.dif ++++++ --- ./src/cmd/ksh93/sh/path.c.orig 2014-10-09 15:50:51.198269322 +0000 +++ ./src/cmd/ksh93/sh/path.c 2014-10-09 15:51:16.351159405 +0000 @@ -517,8 +517,8 @@ static int path_opentype(Shell_t *shp,co do { pp = path_nextcomp(shp,oldpp=pp,name,0); - while(oldpp && (oldpp->flags&PATH_SKIP)) - oldpp = oldpp->next; + if (oldpp && (oldpp->flags&PATH_SKIP)) + continue; if(fun && (!oldpp || !(oldpp->flags&PATH_FPATH))) continue; if((fd = sh_open(path_relative(shp,stakptr(PATH_OFFSET)),O_RDONLY,0)) >= 0) ++++++ ksh93-pathtemp.dif ++++++ --- /var/tmp/diff_new_pack.H72VXR/_old 2017-12-21 11:29:57.865733036 +0100 +++ /var/tmp/diff_new_pack.H72VXR/_new 2017-12-21 11:29:57.865733036 +0100 @@ -1,6 +1,13 @@ --- src/lib/libast/path/pathtemp.c -+++ src/lib/libast/path/pathtemp.c 2014-02-18 15:01:00.750362427 +0000 -@@ -85,9 +85,42 @@ ++++ src/lib/libast/path/pathtemp.c 2012-10-25 10:35:14.510345073 +0000 +@@ -73,15 +73,49 @@ + #include <ls.h> + #include <tv.h> + #include <tm.h> ++#include <error.h> + + #define ATTEMPT 10 + #define TMP_ENV "TMPDIR" #define TMP_PATH_ENV "TMPPATH" #define TMP1 "/tmp" @@ -16,7 +23,7 @@ + + if (!pgsz) + pgsz = strtoul(astconf("PAGESIZE",NiL,NiL),NiL,0); -+ ++ + if (!path || !*path) + { + errno = EFAULT; @@ -29,7 +36,7 @@ + + if (ret < 0) + goto err; -+ ++ + if (vfs.f_frsize*vfs.f_bavail < pgsz) + { + errno = ENOSPC; @@ -41,11 +48,11 @@ + return -1; +} + -+#define VALID(d) (*(d)&&!xaccess(d,W_OK|X_OK)) ++#define VALID(d) (*(d)&&!xaccess(d,W_OK|X_OK)) - static struct Tmp_s + static struct { -@@ -197,7 +230,7 @@ pathtemp(char* buf, size_t len, const ch +@@ -182,7 +216,7 @@ pathtemp(char* buf, size_t len, const ch tv.tv_nsec = 0; else tvgettime(&tv); @@ -54,7 +61,7 @@ { if (!tmp.vec) { -@@ -242,7 +275,7 @@ pathtemp(char* buf, size_t len, const ch +@@ -227,7 +261,7 @@ pathtemp(char* buf, size_t len, const ch tmp.dir = tmp.vec; d = *tmp.dir++; } @@ -64,7 +71,7 @@ } if (!len) --- src/lib/libast/sfio/sftmp.c -+++ src/lib/libast/sfio/sftmp.c 2014-02-18 14:57:17.508587267 +0000 ++++ src/lib/libast/sfio/sftmp.c 2012-10-25 12:09:18.026344912 +0000 @@ -20,6 +20,14 @@ * * ***********************************************************************/ ++++++ ksh93-profile.dif ++++++ --- /var/tmp/diff_new_pack.H72VXR/_old 2017-12-21 11:29:57.873732646 +0100 +++ /var/tmp/diff_new_pack.H72VXR/_new 2017-12-21 11:29:57.873732646 +0100 @@ -1,6 +1,6 @@ --- src/cmd/ksh93/sh/main.c -+++ src/cmd/ksh93/sh/main.c 2014-02-17 16:18:29.717590155 +0000 -@@ -205,14 +205,38 @@ int sh_main(int ac, char *av[], Shinit_f ++++ src/cmd/ksh93/sh/main.c 2010-08-17 15:35:18.000000000 +0000 +@@ -200,14 +200,38 @@ int sh_main(int ac, char *av[], Shinit_f { /* system profile */ sh_source(shp, iop, e_sysprofile); @@ -8,12 +8,12 @@ + /* make sure PWD is set up correctly */ + path_pwd(shp,1); +#if SHOPT_SYSRC -+ if(!sh_isoption(shp,SH_NOEXEC)) ++ if(!sh_isoption(SH_NOEXEC)) + { -+ if(!sh_isoption(shp,SH_NOUSRPROFILE) && !sh_isoption(shp,SH_PRIVILEGED) && sh_isoption(shp,SH_RC)) ++ if(!sh_isoption(SH_NOUSRPROFILE) && !sh_isoption(SH_PRIVILEGED) && sh_isoption(SH_RC)) + { +#if SHOPT_BASH -+ if(sh_isoption(shp,SH_BASH) && !sh_isoption(shp,SH_POSIX)) ++ if(sh_isoption(SH_BASH) && !sh_isoption(SH_POSIX)) + sh_source(shp, iop, e_bash_sysrc); + else +#endif @@ -28,9 +28,9 @@ + } + } +#endif -+ if(sh_isoption(shp,SH_LOGIN_SHELL) && !sh_isoption(shp,SH_NOPROFILE)) ++ if(sh_isoption(SH_LOGIN_SHELL) && !sh_isoption(SH_NOPROFILE)) + { - if(!sh_isoption(shp,SH_NOUSRPROFILE) && !sh_isoption(shp,SH_PRIVILEGED)) + if(!sh_isoption(SH_NOUSRPROFILE) && !sh_isoption(SH_PRIVILEGED)) { char **files = shp->gd->login_files; while ((name = *files++) && !sh_source(shp, iop, sh_mactry(shp,name))); @@ -38,12 +38,12 @@ } - /* make sure PWD is set up correctly */ - path_pwd(shp,1); - if(!sh_isoption(shp,SH_NOEXEC)) + if(!sh_isoption(SH_NOEXEC)) { - if(!sh_isoption(shp,SH_NOUSRPROFILE) && !sh_isoption(shp,SH_PRIVILEGED) && sh_isoption(shp,SH_RC)) -@@ -220,9 +243,6 @@ int sh_main(int ac, char *av[], Shinit_f + if(!sh_isoption(SH_NOUSRPROFILE) && !sh_isoption(SH_PRIVILEGED) && sh_isoption(SH_RC)) +@@ -215,9 +239,6 @@ int sh_main(int ac, char *av[], Shinit_f #if SHOPT_BASH - if(sh_isoption(shp,SH_BASH) && !sh_isoption(shp,SH_POSIX)) + if(sh_isoption(SH_BASH) && !sh_isoption(SH_POSIX)) { -#if SHOPT_SYSRC - sh_source(shp, iop, e_bash_sysrc); @@ -51,12 +51,12 @@ sh_source(shp, iop, shp->gd->rcfile ? shp->gd->rcfile : sh_mactry(shp,(char*)e_bash_rc)); } else -@@ -230,10 +250,6 @@ int sh_main(int ac, char *av[], Shinit_f +@@ -225,10 +246,6 @@ int sh_main(int ac, char *av[], Shinit_f { if(name = sh_mactry(shp,nv_getval(ENVNOD))) name = *name ? strdup(name) : (char*)0; -#if SHOPT_SYSRC -- if(!name || !strmatch(name, "?(.)/./*")) +- if(!strmatch(name, "?(.)/./*")) - sh_source(shp, iop, e_sysrc); -#endif if(name) ++++++ ksh93-redirectleak.dif ++++++ --- src/cmd/ksh93/sh/io.c.orig 2015-12-09 11:18:00.657295950 +0000 +++ src/cmd/ksh93/sh/io.c 2015-12-09 11:18:57.719080685 +0000 @@ -1541,7 +1541,17 @@ int sh_redirect(Shell_t *shp,struct iono sh_iosave(shp,fn,indx,tname?fname:(trunc?Empty:0)); } else if(sh_subsavefd(fn)) + { + if(fd==fn) + { + if((r=sh_fcntl(fd,F_DUPFD,10)) > 0) + { + fd = r; + sh_close(fn); + } + } sh_iosave(shp,fn,indx|IOSUBSHELL,tname?fname:0); + } } if(fd<0) { ++++++ ksh93-reg.dif ++++++ --- /var/tmp/diff_new_pack.H72VXR/_old 2017-12-21 11:29:57.889731866 +0100 +++ /var/tmp/diff_new_pack.H72VXR/_new 2017-12-21 11:29:57.889731866 +0100 @@ -1,6 +1,6 @@ --- src/cmd/ksh93/edit/edit.c +++ src/cmd/ksh93/edit/edit.c 2013-02-01 17:18:31.405454238 +0000 -@@ -1697,8 +1697,13 @@ int ed_histgen(Edit_t *ep,const char *pa +@@ -1769,8 +1769,13 @@ int ed_histgen(Edit_t *ep,const char *pa mplast->next = mp; mplast->next = 0; } ++++++ ksh93-s390.dif ++++++ --- /var/tmp/diff_new_pack.H72VXR/_old 2017-12-21 11:29:57.897731476 +0100 +++ /var/tmp/diff_new_pack.H72VXR/_new 2017-12-21 11:29:57.897731476 +0100 @@ -1,8 +1,8 @@ --- src/cmd/ksh93/bltins/read.c -+++ src/cmd/ksh93/bltins/read.c 2014-02-18 12:46:08.326103466 +0000 -@@ -297,6 +297,20 @@ int sh_readline(register Shell_t *shp,ch ++++ src/cmd/ksh93/bltins/read.c 2013-02-01 15:29:39.393452098 +0000 +@@ -288,6 +288,19 @@ int sh_readline(register Shell_t *shp,ch ep->e_nttyparm.c_lflag |= ISIG; - tty_set(sffileno(iop),TCSADRAIN,&ep->e_nttyparm); + tty_set(fd,TCSADRAIN,&ep->e_nttyparm); } +#if defined(__linux__) + else if ((shp->fdstatus[fd]&(IOTTY|IONOSEEK))==0) @@ -17,7 +17,6 @@ + } + } +#endif -+ } binary = nv_isattr(np,NV_BINARY); if(!binary && !(flags&(N_FLAG|NN_FLAG))) ++++++ ksh93-sfio.dif ++++++ --- src/lib/libast/include/sfio_t.h +++ src/lib/libast/include/sfio_t.h 2013-10-11 09:22:41.000000000 +0000 @@ -34,7 +34,7 @@ #define _SFIO_PRIVATE \ Sfoff_t extent; /* current file size */ \ Sfoff_t here; /* current physical location */ \ - unsigned char unused_1;/* unused #1 */ \ + unsigned char ngetr; /* sfgetr count */ \ unsigned char tiny[1];/* for unbuffered read stream */ \ unsigned short bits; /* private flags */ \ unsigned int mode; /* current io mode */ \ @@ -82,7 +82,7 @@ (ssize_t)(-1), /* val */ \ (Sfoff_t)0, /* extent */ \ (Sfoff_t)0, /* here */ \ - 0, /* getr */ \ + 0, /* ngetr */ \ {0}, /* tiny */ \ 0, /* bits */ \ (unsigned int)(((type)&(SF_RDWR))|SF_INIT), /* mode */ \ @@ -93,7 +93,8 @@ (mutex), /* mutex */ \ (Void_t*)0, /* stdio */ \ (Sfoff_t)0, /* lpos */ \ - (size_t)0 /* iosz */ \ + (size_t)0, /* iosz */ \ + 0 /* getr */ \ } /* function to clear an Sfio_t structure */ @@ -110,7 +111,7 @@ (f)->val = (ssize_t)(-1), /* val */ \ (f)->extent = (Sfoff_t)(-1), /* extent */ \ (f)->here = (Sfoff_t)0, /* here */ \ - (f)->getr = 0, /* getr */ \ + (f)->ngetr = 0, /* ngetr */ \ (f)->tiny[0] = 0, /* tiny */ \ (f)->bits = 0, /* bits */ \ (f)->mode = 0, /* mode */ \ @@ -121,7 +122,8 @@ (f)->mutex = (mtx), /* mutex */ \ (f)->stdio = (Void_t*)0, /* stdio */ \ (f)->lpos = (Sfoff_t)0, /* lpos */ \ - (f)->iosz = (size_t)0 /* iosz */ \ + (f)->iosz = (size_t)0, /* iosz */ \ + (f)->getr = 0 /* getr */ \ ) /* expose next stream inside discipline function; state saved in int f */ --- src/lib/libast/sfio/sfflsbuf.c +++ src/lib/libast/sfio/sfflsbuf.c 2013-10-18 11:50:01.866235555 +0000 @@ -96,7 +96,7 @@ int c; /* if c>=0, c is also written out isall = SFISALL(f,isall); if((w = SFWR(f,data,n,f->disc)) > 0) { if((n -= w) > 0) /* save unwritten data, then resume */ - memcpy((char*)f->data,(char*)data+w,n); + memmove((char*)f->data,(char*)data+w,n); written += w; f->next = f->data+n; if(c < 0 && (!isall || n == 0)) --- src/lib/libast/sfio/sfmode.c +++ src/lib/libast/sfio/sfmode.c 2013-10-11 09:26:43.000000000 +0000 @@ -258,7 +258,7 @@ reg Sfio_t* f; /* stream to close */ #endif { Sfproc_t* p; - int pid, status; + int status; if(!(p = f->proc)) return -1; @@ -279,7 +279,7 @@ reg Sfio_t* f; /* stream to close */ sigcritical(SIG_REG_EXEC|SIG_REG_PROC); #endif status = -1; - while ((pid = waitpid(p->pid,&status,0)) == -1 && errno == EINTR) + while (waitpid(p->pid,&status,0) == -1 && errno == EINTR) ; #if _PACKAGE_ast status = status == -1 ? @@ -405,12 +405,16 @@ reg int local; /* a local call */ if(f->mode&SF_GETR) { f->mode &= ~SF_GETR; #ifdef MAP_TYPE - if((f->bits&SF_MMAP) && (f->tiny[0] += 1) >= (4*SF_NMAP) ) - { /* turn off mmap to avoid page faulting */ - sfsetbuf(f,(Void_t*)f->tiny,(size_t)SF_UNBOUND); - f->tiny[0] = 0; + if(f->bits&SF_MMAP) + { + if (!++f->ngetr) + f->tiny[0]++; + if(((f->tiny[0]<<8)|f->ngetr) >= (4*SF_NMAP) ) + { /* turn off mmap to avoid page faulting */ + sfsetbuf(f,(Void_t*)f->tiny,(size_t)SF_UNBOUND); + f->ngetr = f->tiny[0] = 0; + } } - else #endif if(f->getr) { f->next[-1] = f->getr; --- src/lib/libast/sfio/sfmove.c +++ src/lib/libast/sfio/sfmove.c 2013-10-18 12:04:03.194735625 +0000 @@ -113,7 +113,11 @@ reg int rc; /* record separator */ /* try reading a block of data */ direct = 0; - if((r = fr->endb - (next = fr->next)) <= 0) + if(fr->rsrv && (r = -fr->rsrv->slen) > 0) + { fr->rsrv->slen = 0; + next = fr->rsrv->data; + } + else if((r = fr->endb - (next = fr->next)) <= 0) { /* amount of data remained to be read */ if((w = n > MAX_SSIZE ? MAX_SSIZE : (ssize_t)n) < 0) { if(fr->extent < 0) --- src/lib/libast/sfio/sfpoll.c +++ src/lib/libast/sfio/sfpoll.c 2013-10-18 11:59:50.778735232 +0000 @@ -138,7 +138,7 @@ int tm; /* time in millisecs for select while((np = SFPOLL(fds,m,tm)) < 0 ) { if(errno == eintr || errno == EAGAIN) errno = 0; - else break; + else goto report; } if(np > 0) /* poll succeeded */ np = c; @@ -147,14 +147,14 @@ int tm; /* time in millisecs for select { f = fa[check[r]]; if((f->flags&SF_WRITE) && !WRREADY(f) ) - { if(fds[m].revents&POLLOUT) + { if(fds[m].revents&(POLLOUT|POLLHUP|POLLERR)) status[check[r]] |= SF_WRITE; } if((f->flags&SF_READ) && !RDREADY(f)) { if((f->mode&SF_WRITE) && HASAUXFD(f)) m += 1; - if(fds[m].revents&POLLIN) + if(fds[m].revents&(POLLIN|POLLHUP|POLLERR)) status[check[r]] |= SF_READ; } } @@ -200,7 +200,7 @@ int tm; /* time in millisecs for select while((np = select(m+1,&rd,&wr,NIL(fd_set*),tmp)) < 0 ) { if(errno == eintr) errno = 0; - else break; + else goto report; } if(np > 0) np = c; @@ -227,6 +227,7 @@ int tm; /* time in millisecs for select } #endif /*_lib_select*/ + report: for(r = c = 0; c < n; ++c) { if(status[c] == 0) continue; --- src/lib/libast/sfio/sfpool.c +++ src/lib/libast/sfio/sfpool.c 2013-10-18 11:49:25.614237061 +0000 @@ -138,7 +138,7 @@ int n; /* current position in pool */ else /* write failed, recover buffer then quit */ { if(w > 0) { v -= w; - memcpy(head->data,(head->data+w),v); + memmove(head->data,(head->data+w),v); } head->next = head->data+v; goto done; @@ -147,7 +147,7 @@ int n; /* current position in pool */ /* move data from head to f */ if((head->data+k) != f->data ) - memcpy(f->data,(head->data+k),v); + memmove(f->data,(head->data+k),v); f->next = f->data+v; } --- src/lib/libast/sfio/sfsetbuf.c +++ src/lib/libast/sfio/sfsetbuf.c 2013-10-18 12:02:37.534736056 +0000 @@ -254,6 +254,15 @@ size_t size; /* buffer size, -1 for defa #endif } + /* set page size, this is also the desired default buffer size */ + if(_Sfpage <= 0) + { +#if _lib_getpagesize + if((_Sfpage = (size_t)getpagesize()) <= 0) +#endif + _Sfpage = SF_PAGE; + } + #if SFSETLINEMODE if(init) f->flags |= sfsetlinemode(); @@ -308,15 +317,6 @@ size_t size; /* buffer size, -1 for defa (void)_sfpopen(f,-1,-1,1); } } - - /* set page size, this is also the desired default buffer size */ - if(_Sfpage <= 0) - { -#if _lib_getpagesize - if((_Sfpage = (size_t)getpagesize()) <= 0) -#endif - _Sfpage = SF_PAGE; - } } #ifdef MAP_TYPE --- src/lib/libast/string/stropt.c +++ src/lib/libast/string/stropt.c 2013-01-03 17:20:37.000000000 +0100 @@ -90,7 +90,7 @@ stropt(const char* as, const void* tab, { for (p = (char**)tab; t = *p; p = (char**)((char*)p + siz)) { - for (v = s; *t && *t++ == *v; v++); + for (v = s; *t && *t == *v; t++, v++); if (!*t || isspace(*v) || *v == ',' || *v == '=') break; if (*v == ':' && *(v + 1) == '=') --- src/lib/libast/vmalloc/vmopen.c +++ src/lib/libast/vmalloc/vmopen.c 2013-10-18 13:54:50.918235639 +0000 @@ -68,19 +68,22 @@ int mode; /* type of region */ Block_t *bp, *np; Seg_t *seg; Vmuchar_t *addr; - int rv; + int rv, mt; if(!meth || !disc || !disc->memoryf ) return NIL(Vmalloc_t*); GETPAGESIZE(_Vmpagesize); + mode = (mode&VM_FLAGS) | meth->meth; /* start with user-settable flags */ + vmp = &vmproto; /* avoid memory allocation here! */ memset(vmp, 0, sizeof(Vmalloc_t)); memcpy(&vmp->meth, meth, sizeof(Vmethod_t)); + mt = vmp->meth.meth; + vmp->meth.meth = 0; vmp->disc = disc; - mode &= VM_FLAGS; /* start with user-settable flags */ size = 0; if(disc->exceptf) @@ -155,6 +158,8 @@ int mode; /* type of region */ seg->free = bp; else vd->wild = bp; + vmp->meth.meth = mt; + done: /* now make the region handle */ if(vd->mode&VM_MEMORYF) vm = &init->vm.vm; ++++++ ksh93-shift_ijs.dif ++++++ --- /var/tmp/diff_new_pack.H72VXR/_old 2017-12-21 11:29:57.913730696 +0100 +++ /var/tmp/diff_new_pack.H72VXR/_new 2017-12-21 11:29:57.913730696 +0100 @@ -1,5 +1,5 @@ --- src/cmd/ksh93/edit/edit.c -+++ src/cmd/ksh93/edit/edit.c 2014-02-17 15:30:42.426703357 +0000 ++++ src/cmd/ksh93/edit/edit.c 2007-12-20 17:50:28.000000000 +0000 @@ -28,6 +28,7 @@ */ @@ -8,7 +8,7 @@ #include <errno.h> #include <ccode.h> #include "FEATURE/options" -@@ -57,8 +58,20 @@ static char *savelex; +@@ -57,8 +58,20 @@ static char KILL_LINE[20] = { ESC, '[', #if SHOPT_MULTIBYTE @@ -32,7 +32,7 @@ # define is_cntrl(c) iscntrl(c) # define is_print(c) isprint(c) --- src/cmd/ksh93/edit/emacs.c -+++ src/cmd/ksh93/edit/emacs.c 2014-02-17 15:30:42.426703357 +0000 ++++ src/cmd/ksh93/edit/emacs.c 2007-12-20 17:50:28.000000000 +0000 @@ -62,6 +62,7 @@ One line screen editor for any program */ @@ -51,7 +51,7 @@ # define gencpy(a,b) ed_gencpy(a,b) # define genncpy(a,b,n) ed_genncpy(a,b,n) # define genlen(str) ed_genlen(str) -@@ -1567,11 +1571,19 @@ static void setcursor(register Emacs_t * +@@ -1563,11 +1567,19 @@ static void setcursor(register Emacs_t * #if SHOPT_MULTIBYTE static int print(register int c) { @@ -72,7 +72,7 @@ } #endif /* SHOPT_MULTIBYTE */ --- src/cmd/ksh93/edit/vi.c -+++ src/cmd/ksh93/edit/vi.c 2014-02-17 15:30:42.426703357 +0000 ++++ src/cmd/ksh93/edit/vi.c 2007-12-20 17:50:28.000000000 +0000 @@ -28,6 +28,8 @@ * cbosgd!pds -*/ @@ -82,7 +82,7 @@ #if KSHELL # include "defs.h" -@@ -60,10 +62,19 @@ +@@ -65,10 +67,19 @@ # define gencpy(a,b) ed_gencpy(a,b) # define genncpy(a,b,n) ed_genncpy(a,b,n) # define genlen(str) ed_genlen(str) @@ -105,9 +105,123 @@ # endif static int _isalph(int); static int _ismetach(int); +--- src/cmd/ksh93/sh/io.c ++++ src/cmd/ksh93/sh/io.c 2010-06-28 14:09:09.000000000 +0000 +@@ -1536,6 +1536,7 @@ static int io_heredoc(Shell_t *shp,regis + if(traceon) + sfprintf(sfstderr,"< %s\n",name); + sfputr(outfile,name,'\n'); ++ off = 0; + } + else + { +--- src/cmd/ksh93/sh/macro.c ++++ src/cmd/ksh93/sh/macro.c 2013-03-19 17:16:46.062074381 +0100 +@@ -54,6 +54,7 @@ + #if SHOPT_MULTIBYTE + # undef isascii + # define isacii(c) ((c)<=UCHAR_MAX) ++# include <lc.h> + #else + # define mbchar(p) (*(unsigned char*)p++) + #endif /* SHOPT_MULTIBYTE */ +@@ -2026,6 +2027,11 @@ static void comsubst(Mac_t *mp,register + struct _mac_ savemac; + int savtop = stktell(stkp); + char lastc=0, *savptr = stkfreeze(stkp,0); ++#if SHOPT_MULTIBYTE ++ const Lc_t *lc=lcinfo(LC_CTYPE)->lc; ++ wchar_t lastw=0; ++#endif /* SHOPT_MULTIBYTE */ ++ ssize_t len; + int was_history = sh_isstate(SH_HISTORY); + int was_verbose = sh_isstate(SH_VERBOSE); + int was_interactive = sh_isstate(SH_INTERACTIVE); +@@ -2127,7 +2133,7 @@ static void comsubst(Mac_t *mp,register + num = lseek(fd, (off_t)0, SEEK_CUR); + goto out_offset; + } +- if(!(sp=mp->shp->sftable[fd])) ++ if(!(sp=mp->shp->sftable[fd]) || (sffileno(sp)!=fd &&!(sfset(sp,0,0)&SF_STRING))) + sp = sfnew(NIL(Sfio_t*),(char*)malloc(IOBSIZE+1),IOBSIZE,fd,SF_READ|SF_MALLOC); + type = 3; + } +@@ -2209,17 +2215,36 @@ static void comsubst(Mac_t *mp,register + } + else if(lastc) + { +- mac_copy(mp,&lastc,1); ++ char mb[8]; ++ mb[0] = lastc; ++ len = 1; ++#if SHOPT_MULTIBYTE ++ if(lastw) ++ len = mbconv(mb, lastw); ++ lastw = 0; ++#endif /* SHOPT_MULTIBYTE */ + lastc = 0; ++ mac_copy(mp,mb,len); + } + newlines = nextnewlines; + if(++c < bufsize) + str[c] = 0; + else + { +- ssize_t len = 1; ++ len = 1; + + /* can't write past buffer so save last character */ ++#if SHOPT_MULTIBYTE ++ if ((lc->flags & LC_utf8)==0 && (len = mbsize(str))>1) ++ { ++ len = mb2wc(lastw,str,len); ++ if (len < 0) ++ { ++ lastw = 0; ++ len = 1; ++ } ++ } ++#endif /* SHOPT_MULTIBYTE */ + c -= len; + lastc = str[c]; + str[c] = 0; +@@ -2240,8 +2265,16 @@ static void comsubst(Mac_t *mp,register + } + if(lastc) + { +- mac_copy(mp,&lastc,1); ++ char mb[8]; ++ mb[0] = lastc; ++ len = 1; ++#if SHOPT_MULTIBYTE ++ if(lastw) ++ len = mbconv(mb, lastw); ++ lastw = 0; ++#endif /* SHOPT_MULTIBYTE */ + lastc = 0; ++ mac_copy(mp,mb,len); + } + sfclose(sp); + return; +@@ -2340,13 +2373,13 @@ static void mac_copy(register Mac_t *mp, + if(mp->pattern) + { + char *sp = "&|()"; +- while(c = *sp++) ++ while((c = *sp++)) + { + if(state[c]==0) + state[c] = S_EPAT; + } + sp = "*?[{"; +- while(c = *sp++) ++ while((c = *sp++)) + { + if(state[c]==0) + state[c] = S_PAT; --- src/cmd/ksh93/sh/string.c -+++ src/cmd/ksh93/sh/string.c 2014-02-17 15:30:52.534784033 +0000 -@@ -36,7 +36,7 @@ ++++ src/cmd/ksh93/sh/string.c 2007-12-20 17:51:07.000000000 +0000 +@@ -37,7 +37,7 @@ #endif #if !_lib_iswprint && !defined(iswprint) @@ -116,7 +230,7 @@ #endif -@@ -244,7 +244,7 @@ void sh_trim(register char *sp) +@@ -245,7 +245,7 @@ void sh_trim(register char *sp) if(sp) { dp = sp; @@ -126,7 +240,7 @@ #if SHOPT_MULTIBYTE int len; --- src/cmd/ksh93/tests/sjis.sh -+++ src/cmd/ksh93/tests/sjis.sh 2014-02-17 15:30:52.534784033 +0000 ++++ src/cmd/ksh93/tests/sjis.sh 2011-05-20 15:11:29.000000000 +0000 @@ -0,0 +1,77 @@ +######################################################################## +# # @@ -206,7 +320,7 @@ +fi +exit $err --- src/lib/libast/comp/setlocale.c -+++ src/lib/libast/comp/setlocale.c 2014-02-17 15:30:52.534784033 +0000 ++++ src/lib/libast/comp/setlocale.c 2007-12-20 17:50:28.000000000 +0000 @@ -32,6 +32,7 @@ #include "lclib.h" @@ -215,20 +329,29 @@ #include <ast_wchar.h> #include <ctype.h> #include <mc.h> +--- src/lib/libast/comp/wc.c ++++ src/lib/libast/comp/wc.c 2007-12-20 17:50:28.000000000 +0000 +@@ -26,6 +26,7 @@ + */ + + #include <ast.h> ++#include <ast_wchar.h> + #include <wchar.h> + + #define STUB 1 --- src/lib/libast/features/wchar -+++ src/lib/libast/features/wchar 2014-02-17 15:39:52.471093724 +0000 -@@ -8,8 +8,9 @@ cat{ ++++ src/lib/libast/features/wchar 2007-12-20 17:50:28.000000000 +0000 +@@ -8,7 +8,8 @@ cat{ #define _AST_WCHAR_H 1 }end --lib mbstowcs,wctomb,wcscmp,wcscoll,wcslen,wcstombs,wcsxfrm,wcwidth stdlib.h stdio.h wchar.h -+lib mbstowcs,wctomb,wcscmp,wcscoll,wcslen,wcstombs,wcsxfrm,wcscpy,wcwidth stdlib.h stdio.h wchar.h - lib mbrlen,mbrtowc,mbsrtowcs,wcrtomb,wcsrtombs stdlib.h stdio.h wchar.h +-lib mbstowcs,wctomb,wcrtomb,wcslen,wcstombs,wcwidth stdlib.h stdio.h wchar.h ++lib mbstowcs,wctomb,wcrtomb,wcslen,wcstombs,wcscpy,wcwidth stdlib.h stdio.h wchar.h wctype.h +lib iswprint,iswalpha,iswalnum,iswdigit,iswcntrl stdlib.h stdio.h ctype.h wctype.h lib towlower,towupper stdlib.h stdio.h wchar.h typ mbstate_t stdlib.h stdio.h wchar.h nxt wchar -@@ -69,6 +70,12 @@ cat <<! +@@ -68,6 +69,12 @@ cat <<! #undef putwc #undef putwchar #undef ungetwc @@ -241,7 +364,7 @@ #define fgetwc _ast_fgetwc #define fgetws _ast_fgetws -@@ -138,6 +145,12 @@ cat <<! +@@ -118,6 +125,12 @@ cat <<! #if !_lib_wcstombs extern size_t wcstombs(char*, const wchar_t*, size_t); #endif @@ -255,33 +378,36 @@ extern int fwprintf(FILE*, const wchar_t*, ...); extern int fwscanf(FILE*, const wchar_t*, ...); --- src/lib/libast/include/ast.h -+++ src/lib/libast/include/ast.h 2014-02-17 15:49:44.951821429 +0000 -@@ -444,13 +444,21 @@ extern char** environ; - #else - - #define mb2wc(w,p,n) (*ast.mb_towc)(&(w),(char*)(p),(n)) --#define mbchar(p) (mbwide()?((ast.tmp_int=(*ast.mb_towc)(&ast.tmp_wchar,(char*)(p),mbmax()))>0?((p+=ast.tmp_int),ast.tmp_wchar):(p+=ast.mb_sync+1,ast.tmp_int)):(*(unsigned char*)(p++))) --#define mbnchar(p,n) (mbwide()?((ast.tmp_int=(*ast.mb_towc)(&ast.tmp_wchar,(char*)(p),n))>0?((p+=ast.tmp_int),ast.tmp_wchar):(p+=ast.mb_sync+1,ast.tmp_int)):(*(unsigned char*)(p++))) - #define mbinit() (mbwide()?(*ast.mb_towc)((wchar_t*)0,(char*)0,mbmax()):0) - #define mbsize(p) (mbwide()?(*ast.mb_len)((char*)(p),mbmax()):((p),1)) - #define mbnsize(p,n) (mbwide()?(*ast.mb_len)((char*)(p),n):((p),1)) - #define mbconv(s,w) (ast.mb_conv?(*ast.mb_conv)(s,w):((*(s)=(w)),1)) - -+#define mbchar(p) (mbwide() ? \ -+ (((ast.tmp_int=(*ast.mb_towc)(&ast.tmp_wchar,(char*)(p),mbmax()))>0) ? \ -+ ({p+=ast.tmp_int;ast.tmp_wchar;}) : \ -+ ({ast.tmp_int=*(unsigned char*)p;p+=ast.mb_sync+1;ast.tmp_int;})) : \ -+ (*(unsigned char*)(p++))) -+#define mbnchar(p,n) (mbwide() ? \ -+ (((ast.tmp_int=(*ast.mb_towc)(&ast.tmp_wchar,(char*)(p),n))>0) ? \ -+ ({p+=ast.tmp_int;ast.tmp_wchar;}) : \ -+ ({ast.tmp_int=*(unsigned char*)p;p+=ast.mb_sync+1;ast.tmp_int;})): \ -+ (*(unsigned char*)(p++))) - #endif - - /* generic plugin version support */ ++++ src/lib/libast/include/ast.h 2010-08-17 15:09:21.000000000 +0000 +@@ -185,8 +185,6 @@ typedef struct + #define mbwide() (mbmax()>1) + + #define mb2wc(w,p,n) (*ast.mb_towc)(&w,(char*)p,n) +-#define mbchar(p) (mbwide()?((ast.tmp_int=(*ast.mb_towc)(&ast.tmp_wchar,(char*)(p),mbmax()))>0?((p+=ast.tmp_int),ast.tmp_wchar):(p+=ast.mb_sync+1,ast.tmp_int)):(*(unsigned char*)(p++))) +-#define mbnchar(p,n) (mbwide()?((ast.tmp_int=(*ast.mb_towc)(&ast.tmp_wchar,(char*)(p),n))>0?((p+=ast.tmp_int),ast.tmp_wchar):(p+=ast.mb_sync+1,ast.tmp_int)):(*(unsigned char*)(p++))) + #define mbinit() (mbwide()?(*ast.mb_towc)((wchar_t*)0,(char*)0,mbmax()):0) + #define mbsize(p) (mbwide()?(*ast.mb_len)((char*)(p),mbmax()):((p),1)) + #define mbnsize(p,n) (mbwide()?(*ast.mb_len)((char*)(p),n):((p),1)) +@@ -195,6 +193,17 @@ typedef struct + #define mbxfrm(t,f,n) (mbcoll()?(*ast.mb_xfrm)((char*)(t),(char*)(f),n):0) + #define mbalpha(w) (ast.mb_alpha?(*ast.mb_alpha)(w):isalpha((w)&0xff)) + ++#define mbchar(p) (mbwide() ? \ ++ (((ast.tmp_int=(*ast.mb_towc)(&ast.tmp_wchar,(char*)(p),mbmax()))>0) ? \ ++ ({p+=ast.tmp_int;ast.tmp_wchar;}) : \ ++ ({ast.tmp_int=*(unsigned char*)p;p+=ast.mb_sync+1;ast.tmp_int;})) : \ ++ (*(unsigned char*)(p++))) ++#define mbnchar(p,n) (mbwide() ? \ ++ (((ast.tmp_int=(*ast.mb_towc)(&ast.tmp_wchar,(char*)(p),n))>0) ? \ ++ ({p+=ast.tmp_int;ast.tmp_wchar;}) : \ ++ ({ast.tmp_int=*(unsigned char*)p;p+=ast.mb_sync+1;ast.tmp_int;})) : \ ++ (*(unsigned char*)(p++))) ++ + /* + * common macros + */ --- src/lib/libast/regex/reglib.h -+++ src/lib/libast/regex/reglib.h 2014-02-17 15:30:52.538784065 +0000 ++++ src/lib/libast/regex/reglib.h 2007-12-20 17:50:28.000000000 +0000 @@ -57,6 +57,7 @@ typedef struct regsubop_s char re_rhs[1]; /* substitution rhs */ @@ -291,13 +417,13 @@ #include <stk.h> --- src/lib/libcmd/Mamfile -+++ src/lib/libcmd/Mamfile 2014-02-17 15:42:56.236560387 +0000 -@@ -592,7 +592,7 @@ make cat.o ++++ src/lib/libcmd/Mamfile 2013-02-05 15:11:03.153953100 +0000 +@@ -509,7 +509,7 @@ make cat.o prev cat.c meta cat.o %.c>%.o cat.c cat prev cat.c --exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -I${PACKAGE_ast_INCLUDE} -DERROR_CATALOG=\""libcmd"\" -DUSAGE_LICENSE=\""[-author?Glenn Fowler <glenn.s.fow...@gmail.com>][-author?David Korn <dgk...@gmail.com>][-copyright?Copyright (c) 1992-2014 AT&T Intellectual Property][-license?http://www.eclipse.org/org/documents/epl-v10.html][--catalog?libcmd]"\" -D_BLD_cmd -D_PACKAGE_ast -c cat.c -+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -I${PACKAGE_ast_INCLUDE} -DERROR_CATALOG=\""libcmd"\" -DUSAGE_LICENSE=\""[-author?Glenn Fowler <glenn.s.fow...@gmail.com>][-author?David Korn <dgk...@gmail.com>][-copyright?Copyright (c) 1992-2014 AT&T Intellectual Property][-license?http://www.eclipse.org/org/documents/epl-v10.html][--catalog?libcmd]"\" -D_BLD_cmd -D_PACKAGE_ast -DSHOPT_MULTIBYTE -c cat.c +-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -I${PACKAGE_ast_INCLUDE} -DERROR_CATALOG=\""libcmd"\" -DUSAGE_LICENSE=\""[-author?Glenn Fowler <g...@research.att.com>][-author?David Korn <d...@research.att.com>][-copyright?Copyright (c) 1992-2012 AT&T Intellectual Property][-license?http://www.eclipse.org/org/documents/epl-v10.html][--catalog?libcmd]"\" -D_BLD_cmd -D_PACKAGE_ast -c cat.c ++exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -I${PACKAGE_ast_INCLUDE} -DERROR_CATALOG=\""libcmd"\" -DUSAGE_LICENSE=\""[-author?Glenn Fowler <g...@research.att.com>][-author?David Korn <d...@research.att.com>][-copyright?Copyright (c) 1992-2012 AT&T Intellectual Property][-license?http://www.eclipse.org/org/documents/epl-v10.html][--catalog?libcmd]"\" -D_BLD_cmd -D_PACKAGE_ast -DSHOPT_MULTIBYTE -c cat.c done cat.o generated make chgrp.o prev chgrp.c ++++++ ksh93-signals.dif ++++++ --- /var/tmp/diff_new_pack.H72VXR/_old 2017-12-21 11:29:57.925730111 +0100 +++ /var/tmp/diff_new_pack.H72VXR/_new 2017-12-21 11:29:57.925730111 +0100 @@ -10,3 +10,41 @@ #if defined(SIGCLD) && !defined(SIGCHLD) # define SIGCHLD SIGCLD +--- src/cmd/ksh93/sh/xec.c ++++ src/cmd/ksh93/sh/xec.c 2007-12-21 12:28:04.000000000 +0000 +@@ -3834,6 +3834,7 @@ static pid_t sh_ntfork(Shell_t *shp,cons + { + signal(SIGTTIN,SIG_DFL); + signal(SIGTTOU,SIG_DFL); ++ signal(SIGTSTP,SIG_DFL); + } + #endif /* SIGTSTP */ + #ifdef JOBS +@@ -3871,6 +3872,9 @@ static pid_t sh_ntfork(Shell_t *shp,cons + { + signal(SIGTTIN,SIG_IGN); + signal(SIGTTOU,SIG_IGN); ++ if(sh_isstate(SH_INTERACTIVE)) ++ signal(SIGTSTP,SIG_IGN); ++ else signal(SIGTSTP,SIG_DFL); + } + #endif /* SIGTSTP */ + if(spawnpid>0) +@@ -3951,6 +3955,7 @@ static pid_t sh_ntfork(Shell_t *shp,cons + { + signal(SIGTTIN,SIG_DFL); + signal(SIGTTOU,SIG_DFL); ++ signal(SIGTSTP,SIG_DFL); + jobwasset++; + } + #endif /* SIGTSTP */ +@@ -4013,6 +4018,9 @@ static pid_t sh_ntfork(Shell_t *shp,cons + { + signal(SIGTTIN,SIG_IGN); + signal(SIGTTOU,SIG_IGN); ++ if(sh_isstate(SH_INTERACTIVE)) ++ signal(SIGTSTP,SIG_IGN); ++ else signal(SIGTSTP,SIG_DFL); + } + #endif /* SIGTSTP */ + if(sigwasset) ++++++ ksh93-spawnlock.dif ++++++ --- ./src/cmd/ksh93/sh/jobs.c.orig 2016-07-26 12:52:44.178281624 +0000 +++ ./src/cmd/ksh93/sh/jobs.c 2016-07-26 12:52:59.563281597 +0000 @@ -2071,6 +2071,10 @@ void job_fork(pid_t parent) job_lock(); jobfork++; break; + case -2: + jobfork--; + job_unlock(); + break; case 0: jobfork=0; job_unlock(); --- ./src/cmd/ksh93/sh/xec.c.orig 2016-07-26 12:52:37.322281636 +0000 +++ ./src/cmd/ksh93/sh/xec.c 2016-07-26 12:55:37.097281318 +0000 @@ -3952,6 +3952,7 @@ static pid_t sh_ntfork(Shell_t *shp,cons # endif /* !_lib_fork */ sh_pushcontext(shp,buffp,SH_JMPCMD); errorpush(&buffp->err,ERROR_SILENT); + job_lock(); /* errormsg will unlock */ jmpval = sigsetjmp(buffp->buff,0); if(jmpval == 0) { @@ -4050,7 +4051,7 @@ static pid_t sh_ntfork(Shell_t *shp,cons } fail: if(jobfork && spawnpid<0) - job_fork(0); + job_fork(-2); if(spawnpid < 0) switch(errno=shp->path_err) { case ENOENT: @@ -4058,6 +4059,7 @@ static pid_t sh_ntfork(Shell_t *shp,cons default: errormsg(SH_DICT,ERROR_system(ERROR_NOEXEC),e_exec+4); } + job_unlock(); } else exitset(); ++++++ ksh93-stkalias.dif ++++++ --- ./src/lib/libast/misc/stk.c.orig 2014-11-26 16:01:29.606716557 +0000 +++ ./src/lib/libast/misc/stk.c 2014-11-26 16:03:06.031328609 +0000 @@ -505,7 +505,7 @@ static char *stkgrow(register Sfio_t *st register char *cp, *dp=0; register size_t m = stktell(stream); size_t endoff; - char *end=0; + char *end=0, *oldbase=0; int nn=0,add=1; n += (m + sizeof(struct frame)+1); if(sp->stkflags&STK_SMALL) @@ -521,6 +521,7 @@ static char *stkgrow(register Sfio_t *st dp=sp->stkbase; sp->stkbase = ((struct frame*)dp)->prev; end = fp->end; + oldbase = dp; } endoff = end - dp; cp = newof(dp, char, n, nn*sizeof(char*)); @@ -547,10 +548,10 @@ static char *stkgrow(register Sfio_t *st if(fp->nalias=nn) { fp->aliases = (char**)fp->end; - if(end && nn>1) - memmove(fp->aliases,end,(nn-1)*sizeof(char*)); + if(end && nn>add) + memmove(fp->aliases,end,(nn-add)*sizeof(char*)); if(add) - fp->aliases[nn-1] = dp + roundof(sizeof(struct frame),STK_ALIGN); + fp->aliases[nn-1] = oldbase + roundof(sizeof(struct frame),STK_ALIGN); } if(m && !dp) { ++++++ ksh93-stkfreeze.dif ++++++ --- ./src/cmd/ksh93/sh/xec.c.orig 2014-11-21 14:11:39.619645318 +0000 +++ ./src/cmd/ksh93/sh/xec.c 2014-11-21 14:13:55.409987787 +0000 @@ -514,8 +514,8 @@ int sh_debug(Shell_t *shp, const char *t Stk_t *stkp=shp->stk; struct sh_scoped savst; Namval_t *np = SH_COMMANDNOD; - char *sav = stkptr(stkp,0); int n=4, offset=stktell(stkp); + char *sav = stkfreeze(stkp,0); const char *cp = "+=( "; Sfio_t *iop = stkstd; short level; @@ -570,7 +570,7 @@ int sh_debug(Shell_t *shp, const char *t nv_putval(SH_FUNNAMENOD,shp->st.funname,NV_NOFREE); shp->st = savst; if(sav != stkptr(stkp,0)) - stkset(stkp,sav,0); + stkset(stkp,sav,offset); else stkseek(stkp,offset); return(n); @@ -998,7 +998,7 @@ int sh_exec(register const Shnode_t *t, int ntflag = 0; #endif int topfd = shp->topfd; - char *sav=stkptr(stkp,0); + char *sav=stkfreeze(stkp,0); char *cp=0, **com=0, *comn; int argn; int skipexitset = 0; ++++++ ksh93-stkset-abort.dif ++++++ --- ./src/lib/libast/misc/stk.c.orig 2014-11-22 10:46:29.708285640 +0000 +++ ./src/lib/libast/misc/stk.c 2014-11-22 10:48:32.533777385 +0000 @@ -378,6 +378,8 @@ char *stkset(register Sfio_t * stream, r frames++; } /* set stack back to the beginning */ + if (loc) + abort(); cp = (char*)(fp+1); if(frames) sfsetbuf(stream,cp,sp->stkend-cp); ++++++ ksh93-subshellpwd.dif ++++++ --- ./src/cmd/ksh93/sh/subshell.c.orig 2014-11-13 15:56:44.331110277 +0000 +++ ./src/cmd/ksh93/sh/subshell.c 2014-11-13 15:58:05.104764274 +0000 @@ -547,7 +547,7 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_ struct subshell *xp; sp->shpwd = shp->pwd; #ifdef _lib_fchdir - for(xp=sp->prev; xp; xp=xp->prev) + for(xp=sp->prev; shp->pwd && xp; xp=xp->prev) { if(xp->pwdfd>0 && strcmp(xp->pwd,shp->pwd)==0) { ++++++ ksh93-suid_exec.dif ++++++ --- /var/tmp/diff_new_pack.H72VXR/_old 2017-12-21 11:29:57.973727770 +0100 +++ /var/tmp/diff_new_pack.H72VXR/_new 2017-12-21 11:29:57.973727770 +0100 @@ -1,6 +1,6 @@ --- src/cmd/ksh93/data/msg.c -+++ src/cmd/ksh93/data/msg.c 2014-02-18 16:08:16.662492587 +0000 -@@ -208,7 +208,11 @@ const char e_bash_profile[] = "$HOME/.ba ++++ src/cmd/ksh93/data/msg.c 2007-04-02 14:59:19.000000000 +0000 +@@ -205,7 +205,11 @@ const char e_bash_profile[] = "$HOME/.ba const char e_crondir[] = "/var/spool/cron"; const char e_prohibited[] = "login setuid/setgid shells prohibited"; #if SHOPT_SUID_EXEC @@ -13,7 +13,7 @@ const char hist_fname[] = "/.sh_history"; const char e_dot[] = "."; --- src/cmd/ksh93/sh/suid_exec.c -+++ src/cmd/ksh93/sh/suid_exec.c 2014-02-18 16:10:34.891601497 +0000 ++++ src/cmd/ksh93/sh/suid_exec.c 2012-02-03 08:36:40.000000000 +0000 @@ -62,10 +62,24 @@ #define FDVERIFY 12 /* used to validate /tmp process */ #undef BLKSIZE @@ -110,8 +110,8 @@ /* * return true of shell is in <dir> directory -@@ -345,16 +377,31 @@ int eaccess(register const char *name, r - #endif +@@ -341,16 +373,30 @@ int eaccess(register const char *name, r + } #ifdef _lib_setreuid -static void setids(int mode,int owner,int group) @@ -120,12 +120,12 @@ +#include <grp.h> +static void setids(int mode,uid_t owner,gid_t group) { - if(mode & S_ISGID) +- if(mode & S_ISGID) - setregid(rgroupid,group); -+ { ++ if(mode & S_ISGID) { + struct passwd *pwd; + -+ if (setregid(rgroupid,group) < 0) ++ if (setregid(rgroupid,group)) + error_exit(badexec); + + if (((pwd = getpwuid(owner)) == (struct passwd*)0) || !(pwd->pw_name)) @@ -140,7 +140,7 @@ * is not set, the value for owner that is passsed should be correct. */ - setreuid(ruserid,owner); -+ if (setreuid(ruserid,owner) < 0) ++ if (setreuid(ruserid,owner)) + error_exit(badexec); } ++++++ ksh93-test.dif ++++++ --- /var/tmp/diff_new_pack.H72VXR/_old 2017-12-21 11:29:57.989726990 +0100 +++ /var/tmp/diff_new_pack.H72VXR/_new 2017-12-21 11:29:57.989726990 +0100 @@ -1,6 +1,6 @@ --- src/cmd/ksh93/bltins/test.c -+++ src/cmd/ksh93/bltins/test.c 2014-02-17 16:21:04.138828304 +0000 -@@ -48,12 +48,12 @@ ++++ src/cmd/ksh93/bltins/test.c 2011-05-20 13:45:25.000000000 +0000 +@@ -47,12 +47,12 @@ #ifdef S_ISSOCK # if _pipe_socketpair # if _socketpair_shutdown_mode @@ -16,8 +16,8 @@ # endif # define isasock(f,p) (test_stat(f,p)>=0&&S_ISSOCK((p)->st_mode)) #else -@@ -88,7 +88,7 @@ static int test_strmatch(Shell_t *shp,co - int match[2*(MATCH_MAX+1)],n; +@@ -87,7 +87,7 @@ static int test_strmatch(Shell_t *shp,co + regoff_t match[2*(MATCH_MAX+1)],n; register int c, m=0; register const char *cp=pat; - while(c = *cp++) @@ -25,7 +25,7 @@ { if(c=='(') m++; -@@ -470,7 +470,7 @@ int test_unop(Shell_t *shp,register int +@@ -463,7 +463,7 @@ int test_unop(Shell_t *shp,register int int test_binop(Shell_t *shp,register int op,const char *left,const char *right) { ++++++ ksh93-typedef.dif ++++++ --- /var/tmp/diff_new_pack.H72VXR/_old 2017-12-21 11:29:58.001726405 +0100 +++ /var/tmp/diff_new_pack.H72VXR/_new 2017-12-21 11:29:58.001726405 +0100 @@ -1,11 +1,37 @@ --- src/cmd/ksh93/bltins/typeset.c -+++ src/cmd/ksh93/bltins/typeset.c 2014-02-18 15:57:51.077469326 +0000 -@@ -549,7 +549,7 @@ static int setall(char **argv,regist ++++ src/cmd/ksh93/bltins/typeset.c 2013-03-19 17:21:08.667413362 +0100 +@@ -461,6 +461,7 @@ static void print_value(Sfio_t *iop, Nam + { + char *name; + int aflag=tp->aflag; ++ Namval_t *table; + if(nv_isnull(np)) + { + if(!np->nvflag) +@@ -504,7 +505,9 @@ static void print_value(Sfio_t *iop, Nam + sfwrite(iop,"}\n",2); + return; } - else if(*shp->prefix==0) - shp->prefix = 0; -- if(*argv[0]=='+') -+ if(*argv && *argv[0]=='+') - nvflags |= NV_NOADD; - flag &= ~(NV_NOARRAY|NV_NOSCOPE|NV_VARNAME|NV_IDENT|NV_STATIC|NV_COMVAR|NV_IARRAY); - if(argv[1]) ++ table = tp->sh->last_table; + sfputr(iop,nv_name(np),aflag=='+'?'\n':'='); ++ tp->sh->last_table = table; + if(aflag=='+') + return; + if(nv_isarray(np) && nv_arrayptr(np)) +@@ -675,6 +678,7 @@ static int setall(char **argv,regist + { + if(comvar || (shp->last_root==shp->var_tree && (tp->tp || (!shp->st.real_fun && (nvflags&NV_STATIC)) || (!(flag&(NV_EXPORT|NV_RDONLY)) && nv_isattr(np,(NV_EXPORT|NV_IMPORT))==(NV_EXPORT|NV_IMPORT))))) + { ++ if((flag&(NV_HOST|NV_INTEGER))!=NV_HOST) + _nv_unset(np,0); + } + } +@@ -790,7 +794,7 @@ static int setall(char **argv,regist + else + { + char *oldname=0; +- int len=strlen(name); ++ size_t len=strlen(name); + if(tp->argnum==1 && newflag==NV_INTEGER && nv_isattr(np,NV_INTEGER)) + tp->argnum = 10; + if(np->nvfun && !nv_isarray(np) && name[len-1]=='.') ++++++ ksh93-uninitialized.dif ++++++ --- src/cmd/builtin/pty.c +++ src/cmd/builtin/pty.c 2013-10-25 13:30:22.019295258 +0000 @@ -503,7 +503,7 @@ masterline(Sfio_t* mp, Sfio_t* lp, char* char* t; ssize_t n; ssize_t a; - size_t promptlen; + size_t promptlen = 0; ptrdiff_t d; char promptbuf[64]; @@ -773,6 +773,8 @@ dialogue(Sfio_t* mp, Sfio_t* lp, int del !(master->buf = vmnewof(vm, 0, char, 2 * SF_BUFSIZE, 0))) { error(ERROR_SYSTEM|2, "out of space"); + id = 0; + line = 0; goto done; } master->vm = vm; --- src/cmd/ksh93/edit/edit.c +++ src/cmd/ksh93/edit/edit.c 2013-10-25 13:30:22.020295166 +0000 @@ -1414,12 +1414,12 @@ int ed_internal(const char *src, genchar int ed_external(const genchar *src, char *dest) { register genchar wc; - register int c,size; register char *dp = dest; char *dpmax = dp+sizeof(genchar)*MAXLINE-2; if((char*)src == dp) { - char buffer[MAXLINE*sizeof(genchar)]; + int c; + char buffer[MAXLINE*sizeof(genchar)] = ""; c = ed_external(src,buffer); #ifdef _lib_wcscpy @@ -1431,6 +1431,7 @@ int ed_external(const genchar *src, char } while((wc = *src++) && dp<dpmax) { + ssize_t size; if((size = mbconv(dp, wc)) < 0) { /* copy the character as is */ --- src/cmd/ksh93/sh/init.c +++ src/cmd/ksh93/sh/init.c 2013-10-25 13:30:22.020295166 +0000 @@ -1264,7 +1264,7 @@ Shell_t *sh_init(register int argc,regis static int beenhere; Shell_t *shp; register int n; - int type; + int type = 0; static char *login_files[3]; memfatal(); n = strlen(e_version); @@ -1943,7 +1943,7 @@ static Dt_t *inittree(Shell_t *shp,const register const struct shtable2 *tp; register unsigned n = 0; register Dt_t *treep; - Dt_t *base_treep, *dict; + Dt_t *base_treep, *dict = 0; for(tp=name_vals;*tp->sh_name;tp++) n++; np = (Namval_t*)calloc(n,sizeof(Namval_t)); --- src/cmd/ksh93/sh/macro.c +++ src/cmd/ksh93/sh/macro.c 2013-10-25 13:30:22.021295073 +0000 @@ -1794,7 +1794,7 @@ retry2: register int d = (mode=='@'?' ':mp->ifs); regoff_t match[2*(MATCH_MAX+1)]; int nmatch, nmatch_prev, vsize_last; - char *vlast; + char *vlast=NULL; while(1) { if(!v) --- src/cmd/ksh93/sh/name.c +++ src/cmd/ksh93/sh/name.c 2013-10-25 13:30:22.022294981 +0000 @@ -1344,7 +1344,7 @@ Namval_t *nv_open(const char *name, Dt_t const char *msg = e_varname; char *fname = 0; int offset = staktell(); - Dt_t *funroot; + Dt_t *funroot = NIL(Dt_t*); #if NVCACHE struct Cache_entry *xp; #endif @@ -1820,7 +1820,7 @@ void nv_putval(register Namval_t *np, co else { const char *tofree=0; - int offset,append; + int offset=0,append; #if _lib_pathnative char buff[PATH_MAX]; #endif /* _lib_pathnative */ --- src/cmd/ksh93/sh/nvdisc.c +++ src/cmd/ksh93/sh/nvdisc.c 2013-10-25 13:30:22.022294981 +0000 @@ -449,7 +449,7 @@ static Sfdouble_t lookupn(Namval_t *np, char *nv_setdisc(register Namval_t* np,register const char *event,Namval_t *action,register Namfun_t *fp) { register struct vardisc *vp = (struct vardisc*)np->nvfun; - register int type; + register int type = -1; char *empty = ""; while(vp) { @@ -505,6 +505,8 @@ char *nv_setdisc(register Namval_t* np,r } return(NIL(char*)); } + if (type < 0) + return(NIL(char*)); /* Handle GET/SET/APPEND/UNSET disc */ if(vp && vp->fun.disc->putval!=assign) vp = 0; --- src/cmd/ksh93/sh/nvtree.c +++ src/cmd/ksh93/sh/nvtree.c 2013-10-25 13:30:22.023294889 +0000 @@ -583,7 +583,7 @@ void nv_outnode(Namval_t *np, Sfio_t* ou char *fmtq,*ep,*xp; Namval_t *mp; Namarr_t *ap = nv_arrayptr(np); - int scan,tabs=0,c,more,associative = 0; + int scan=0,tabs=0,c,more,associative = 0; int saveI = Indent; Indent = indent; if(ap) @@ -696,7 +696,7 @@ void nv_outnode(Namval_t *np, Sfio_t* ou static void outval(char *name, const char *vname, struct Walk *wp) { - register Namval_t *np, *nq, *last_table=wp->shp->last_table; + register Namval_t *np, *nq=0, *last_table=wp->shp->last_table; register Namfun_t *fp; int isarray=0, special=0,mode=0; if(*name!='.' || vname[strlen(vname)-1]==']') --- src/cmd/ksh93/sh/nvtype.c +++ src/cmd/ksh93/sh/nvtype.c 2013-10-25 13:30:22.023294889 +0000 @@ -854,9 +854,10 @@ void nv_newtype(Namval_t *mp) Namval_t *nv_mktype(Namval_t **nodes, int numnodes) { Namval_t *mp=nodes[0], *bp=0, *np, *nq, **mnodes=nodes; - int i,j,k,m,n,nd=0,nref=0,iref=0,inherit=0; + int i,j,k,nd=0,nref=0,iref=0,inherit=0; int size=sizeof(NV_DATA), dsize=0, nnodes; - size_t offset=0; + size_t offset=0,m; + ssize_t n; char *name=0, *cp, *sp, **help; Namtype_t *pp,*qp=0,*dp,*tp; Dt_t *root = nv_dict(mp); @@ -869,6 +870,7 @@ Namval_t *nv_mktype(Namval_t **nodes, in _nv_unset(nodes[0],NV_RDONLY); errormsg(SH_DICT,ERROR_exit(1),e_badtypedef,cp); } + n=strlen(nodes[1]->nvname); for(nnodes=1,i=1; i <numnodes; i++) { np=nodes[i]; @@ -1100,7 +1102,6 @@ Namval_t *nv_mktype(Namval_t **nodes, in nv_disc(nq, &pp->childfun.fun, NV_LAST); if(tp = (Namtype_t*)nv_hasdisc(nq, &type_disc)) tp->strsize = -tp->strsize; -else sfprintf(sfstderr,"tp==NULL\n"); for(r=0; r < dp->numnodes; r++) { Namval_t *nr = nv_namptr(dp->nodes,r); --- src/cmd/ksh93/sh/parse.c +++ src/cmd/ksh93/sh/parse.c 2013-10-25 13:30:22.024294796 +0000 @@ -301,7 +301,7 @@ static Shnode_t *getanode(Lex_t *lp, str */ static Shnode_t *makelist(Lex_t *lexp, int type, Shnode_t *l, Shnode_t *r) { - register Shnode_t *t; + register Shnode_t *t = NIL(Shnode_t*); if(!l || !r) sh_syntax(lexp); else @@ -742,7 +742,7 @@ static Shnode_t *funct(Lex_t *lexp) register Shnode_t *t; register int flag; struct slnod *volatile slp=0; - Stak_t *savstak; + Stak_t *savstak = NIL(Stak_t*); Sfoff_t first, last; struct functnod *volatile fp; Sfio_t *iop; @@ -815,7 +815,7 @@ static Shnode_t *funct(Lex_t *lexp) { struct comnod *ac; char *cp, **argv, **argv0; - int c; + int c=-1; t->funct.functargs = ac = (struct comnod*)simple(lexp,SH_NOIO|SH_FUNDEF,NIL(struct ionod*)); if(ac->comset || (ac->comtyp&COMSCAN)) errormsg(SH_DICT,ERROR_exit(3),e_lexsyntax4,lexp->sh->inlineno); --- src/cmd/ksh93/sh/xec.c +++ src/cmd/ksh93/sh/xec.c 2013-10-25 13:30:22.025294704 +0000 @@ -1507,7 +1507,7 @@ int sh_exec(register const Shnode_t *t, Namval_t node; #endif /* SHOPT_NAMESPACE */ struct Namref nr; - long mode; + long mode = 0; register struct slnod *slp; if(!np->nvalue.ip) { @@ -1916,8 +1916,8 @@ int sh_exec(register const Shnode_t *t, * don't create a new process, just * save and restore io-streams */ - pid_t pid; - int jmpval, waitall; + pid_t pid = 0; + int jmpval, waitall = 0; int simple = (t->fork.forktre->tre.tretyp&COMMSK)==TCOM; struct checkpt *buffp = (struct checkpt*)stkalloc(shp->stk,sizeof(struct checkpt)); #if SHOPT_COSHELL @@ -2409,7 +2409,7 @@ int sh_exec(register const Shnode_t *t, Shnode_t *tt = t->wh.whtre; #if SHOPT_FILESCAN Sfio_t *iop=0; - int savein; + int savein=-1; #endif /*SHOPT_FILESCAN*/ #if SHOPT_OPTIMIZE int jmpval = ((struct checkpt*)shp->jmplist)->mode; @@ -2877,7 +2877,7 @@ int sh_exec(register const Shnode_t *t, else { register int traceon=0; - register char *right; + register char *right = 0; register char *trap; char *argv[6]; n = type>>TSHIFT; @@ -2911,7 +2911,7 @@ int sh_exec(register const Shnode_t *t, } else if(type&TBINARY) { - char *op; + char *op = 0; int pattern = 0; if(trap || traceon) op = (char*)(shtab_testops+(n&037)-1)->sh_name; @@ -3376,7 +3376,7 @@ int sh_funscope(int argn, char *argv[],i int jmpval; volatile int r = 0; int n; - char *savstak; + char *savstak = 0; struct funenv *fp = 0; struct checkpt *buffp = (struct checkpt*)stkalloc(shp->stk,sizeof(struct checkpt)); Namval_t *nspace = shp->namespace; @@ -3492,10 +3492,10 @@ int sh_funscope(int argn, char *argv[],i shp->st = *prevscope; shp->topscope = (Shscope_t*)prevscope; nv_getval(sh_scoped(shp,IFSNOD)); - if(nsig) + if(nsig && savstak) memcpy((char*)&shp->st.trapcom[0],savstak,nsig); shp->trapnote=0; - if(nsig) + if(nsig && savstak) stakset(savstak,0); shp->options = options; shp->last_root = last_root; @@ -3584,11 +3584,11 @@ static void sh_funct(Shell_t *shp,Namval int sh_fun(Namval_t *np, Namval_t *nq, char *argv[]) { Shell_t *shp = sh_getinterp(); - register int offset; + register int offset = 0; register char *base; Namval_t node; struct Namref nr; - long mode; + long mode = 0; char *prefix = shp->prefix; int n=0; char *av[3]; --- src/lib/libast/sfio/sfstrtof.h +++ src/lib/libast/sfio/sfstrtof.h 2013-10-25 13:30:22.025294704 +0000 @@ -211,8 +211,8 @@ S2F_function(str, end) char* str; char** int decimal = 0; int thousand = 0; int part = 0; - int back_part; - S2F_batch back_n; + int back_part = 0; + S2F_batch back_n = 0; S2F_number v; S2F_number p; S2F_part_t parts[16]; --- src/lib/libast/sfio/sftable.c +++ src/lib/libast/sfio/sftable.c 2013-10-25 13:30:22.026294612 +0000 @@ -53,7 +53,7 @@ int type; /* >0: scanf, =0: printf, -1: #endif { int base, fmt, flags, dot, width, precis; - ssize_t n_str, size; + ssize_t n_str, size = 0; char *t_str, *sp; int v, n, skip, dollar, decimal, thousand; Sffmt_t savft; --- src/lib/libast/sfio/sfvprintf.c +++ src/lib/libast/sfio/sfvprintf.c 2013-10-25 13:30:22.026294612 +0000 @@ -101,7 +101,7 @@ char* form; /* format to use */ va_list args; /* arg list if !argf */ #endif { - int n, v, w, k, n_s, base, fmt, flags; + int n, v=0, w, k, n_s, base, fmt, flags; Sflong_t lv; char *sp, *ssp, *endsp, *ep, *endep; int dot, width, precis, sign, decpt; @@ -129,7 +129,7 @@ va_list args; /* arg list if !argf */ int decimal = 0, thousand = 0; #if _has_multibyte - wchar_t* wsp; + wchar_t* wsp = 0; SFMBDCL(fmbs) /* state of format string */ SFMBDCL(mbs) /* state of some string */ #ifdef mbwidth --- src/lib/libast/string/stropt.c +++ src/lib/libast/string/stropt.c 2013-10-25 13:30:22.033293966 +0000 @@ -60,13 +60,13 @@ stropt(const char* as, const void* tab, register char* v; register char* t; char** p; - char* u; + char* u = 0; char* x; char* e; int n; int ql; int qr; - int qc; + int qc = 0; if (!as) n = 0; else if (!(x = s = strdup(as))) n = -1; --- src/lib/libast/string/strtoi.h +++ src/lib/libast/string/strtoi.h 2013-10-25 13:30:22.027294520 +0000 @@ -230,13 +230,13 @@ S2I_function(a, e, base) const char* a; #endif register S2I_unumber n; register S2I_unumber x; - register int c; + register int c = 0; register int shift; register unsigned char* p; register unsigned char* cv; unsigned char* b; unsigned char* k; - S2I_unumber v; + S2I_unumber v = 0; #if S2I_multiplier register int base; #endif ++++++ ksh93-unset-f.dif ++++++ --- /var/tmp/diff_new_pack.H72VXR/_old 2017-12-21 11:29:58.017725625 +0100 +++ /var/tmp/diff_new_pack.H72VXR/_new 2017-12-21 11:29:58.021725430 +0100 @@ -1,6 +1,6 @@ --- src/cmd/ksh93/sh/xec.c +++ src/cmd/ksh93/sh/xec.c 2011-07-04 15:42:21.000000000 +0000 -@@ -4041,7 +4041,8 @@ int sh_funscope_20120720(int argn, char *argv[],i +@@ -3387,7 +3387,8 @@ int sh_funscope(int argn, char *argv[],i shp->st.var_local = shp->var_tree; if(!fun) { ++++++ ksh93-vi.dif ++++++ --- /var/tmp/diff_new_pack.H72VXR/_old 2017-12-21 11:29:58.029725040 +0100 +++ /var/tmp/diff_new_pack.H72VXR/_new 2017-12-21 11:29:58.029725040 +0100 @@ -1,6 +1,6 @@ --- src/cmd/ksh93/edit/vi.c -+++ src/cmd/ksh93/edit/vi.c 2014-02-17 15:53:10.873464619 +0000 -@@ -396,6 +396,8 @@ int ed_viread(void *context, int fd, reg ++++ src/cmd/ksh93/edit/vi.c 2007-03-28 16:41:47.000000000 +0000 +@@ -401,6 +401,8 @@ int ed_viread(void *context, int fd, reg if(!yankbuf) yankbuf = (genchar*)malloc(MAXLINE*CHARSIZE); @@ -9,7 +9,7 @@ if( vp->last_cmd == '\0' ) { /*** first time for this shell ***/ -@@ -405,6 +407,8 @@ int ed_viread(void *context, int fd, reg +@@ -410,6 +412,8 @@ int ed_viread(void *context, int fd, reg vp->lastmotion = '\0'; vp->lastrepeat = 1; vp->repeat = 1; @@ -18,7 +18,7 @@ *yankbuf = 0; } -@@ -1132,7 +1136,7 @@ static void cdelete(Vi_t *vp,register in +@@ -1137,7 +1141,7 @@ static void cdelete(Vi_t *vp,register in /*** save characters to be deleted ***/ @@ -27,7 +27,7 @@ { i = cp[nchars]; cp[nchars] = 0; -@@ -2165,6 +2169,9 @@ static void save_last(register Vi_t* vp) +@@ -2169,6 +2173,9 @@ static void save_last(register Vi_t* vp) { register int i; @@ -37,7 +37,7 @@ if( (i = cur_virt - first_virt + 1) > 0 ) { /*** save last thing user typed ***/ -@@ -2414,6 +2421,11 @@ static int textmod(register Vi_t *vp,reg +@@ -2417,6 +2424,11 @@ static int textmod(register Vi_t *vp,reg p = yankbuf; } @@ -49,7 +49,7 @@ addin: switch( c ) { -@@ -2686,6 +2698,8 @@ yankeol: +@@ -2687,6 +2699,8 @@ yankeol: vp->lastmotion = c; if( c == 'y' ) { ++++++ ksh93-vm.dif ++++++ --- /var/tmp/diff_new_pack.H72VXR/_old 2017-12-21 11:29:58.041724455 +0100 +++ /var/tmp/diff_new_pack.H72VXR/_new 2017-12-21 11:29:58.041724455 +0100 @@ -1,30 +1,29 @@ ---- src/lib/libast/vmalloc/vmmaddress.c -+++ src/lib/libast/vmalloc/vmmaddress.c 2014-02-18 14:19:22.978507488 +0000 -@@ -37,6 +37,10 @@ - #endif /*MAP_ANON*/ - #endif /*_mem_mmap_anon*/ +--- src/lib/libast/vmalloc/vmhdr.h ++++ src/lib/libast/vmalloc/vmhdr.h 2012-01-19 09:45:14.000000000 +0000 +@@ -152,6 +152,9 @@ extern void _vmmessage _ARG_((const cha + #endif /*DEBUG*/ + #define VMPAGESIZE 8192 +#if defined(__linux__) && !defined(_lib_getpagesize) +#define _lib_getpagesize 1 +#endif -+ - /* Heuristic to suggest an address usable for mapping shared memory - ** - ** Written by Kiem-Phong Vo, phon...@gmail.com, 07/07/2012 ---- src/lib/libast/vmalloc/vmdcshare.c -+++ src/lib/libast/vmalloc/vmdcshare.c 2014-04-14 16:28:26.406992119 +0200 -@@ -53,8 +53,10 @@ + #if _lib_getpagesize + #define GETPAGESIZE(x) ((x) ? (x) : ((x)=getpagesize()) ) + #else +--- src/lib/libast/vmalloc/vmmopen.c ++++ src/lib/libast/vmalloc/vmmopen.c 2012-01-20 11:13:12.000000000 +0000 +@@ -63,8 +63,10 @@ void _STUB_vmmapopen(){} /* magic word signaling file/segment is ready */ - #define MM_MAGIC ((unsigned int)(('P'<<24) | ('&'<<16) | ('N'<<8) | ('8')) ) /* 1344687672 */ + #define MM_MAGIC ((unsigned int)(('P'<<24) | ('&'<<16) | ('N'<<8) | ('8')) ) +#ifndef __linux__ /* default mimimum region size */ #define MM_MINSIZE (64*_Vmpagesize) +#endif - /* flags for actions on region closing */ - #define MM_DETACH 01 /* detach all attached memory */ -@@ -174,10 +176,19 @@ + /* macros to get the data section and size */ + #define MMHEAD(file) ROUND(sizeof(Mmvm_t)+strlen(file), ALIGN) +@@ -166,10 +168,18 @@ static int mminit(Mmdisc_t* mmdc) if(mmdc->mmvm) /* already done this */ return 0; @@ -34,14 +33,13 @@ if((size = mmdc->size) < MM_MINSIZE ) size = MM_MINSIZE; +#else -+# if __WORDSIZE == 64 -+ extent = 4*1024*1024*sizeof(long); -+# else -+ extent = 512*1024; -+# endif ++ if (sizeof(void*) > 32) ++ extent = ROUND(0x80000,_Vmpagesize); ++ else ++ extent = ROUND(0x40000,_Vmpagesize); + if((size = mmdc->size) < extent) + size = extent; +#endif - size += MMHEAD(mmdc->name) + ALIGN; + size += MMHEAD(mmdc->file) + ALIGN; size = ROUND(size, _Vmpagesize); ++++++ ksh93.dif ++++++ --- /var/tmp/diff_new_pack.H72VXR/_old 2017-12-21 11:29:58.049724065 +0100 +++ /var/tmp/diff_new_pack.H72VXR/_new 2017-12-21 11:29:58.049724065 +0100 @@ -1,18 +1,19 @@ --- src/cmd/ksh93/bltins/print.c -+++ src/cmd/ksh93/bltins/print.c 2014-02-17 14:55:59.193998326 +0000 -@@ -104,7 +104,11 @@ int B_echo(int argc, char *argv[],Shb - { ++++ src/cmd/ksh93/bltins/print.c 2008-05-05 11:20:21.000000000 +0000 +@@ -105,7 +105,11 @@ static char* nullarg[] = { 0, 0 }; + { static char bsd_univ; struct print prdata; +- prdata.options = sh_optecho+5; +# if defined(__linux__) + prdata.options = sh_optecho; +# else - prdata.options = sh_optecho+5; ++ prdata.options = sh_optecho + 5; +# endif prdata.raw = prdata.echon = 0; prdata.sh = context->shp; NOT_USED(argc); -@@ -117,7 +121,52 @@ int B_echo(int argc, char *argv[],Shb +@@ -118,7 +122,52 @@ static char* nullarg[] = { 0, 0 }; prdata.sh->universe = 1; } if(!bsd_univ) @@ -66,8 +67,8 @@ prdata.raw = 1; while(argv[1] && *argv[1]=='-') --- src/cmd/ksh93/data/msg.c -+++ src/cmd/ksh93/data/msg.c 2014-02-17 14:53:59.613033047 +0000 -@@ -205,7 +205,7 @@ const char e_bash_login[] = "$HOME/.bash ++++ src/cmd/ksh93/data/msg.c 2007-12-20 18:01:26.000000000 +0000 +@@ -202,7 +202,7 @@ const char e_bash_login[] = "$HOME/.bash const char e_bash_logout[] = "$HOME/.bash_logout"; const char e_bash_profile[] = "$HOME/.bash_profile"; #endif @@ -77,7 +78,7 @@ #if SHOPT_SUID_EXEC const char e_suidexec[] = "/etc/suid_exec"; --- src/cmd/ksh93/data/variables.c -+++ src/cmd/ksh93/data/variables.c 2014-02-17 14:53:59.613033047 +0000 ++++ src/cmd/ksh93/data/variables.c 2008-09-18 17:22:24.000000000 +0000 @@ -69,7 +69,7 @@ const struct shtable2 shtab_variables[] "OPTARG", 0, (char*)0, "OPTIND", NV_NOFREE|NV_INTEGER, (char*)0, @@ -88,7 +89,7 @@ "LC_ALL", 0, (char*)0, "LC_COLLATE", 0, (char*)0, --- src/cmd/ksh93/features/options -+++ src/cmd/ksh93/features/options 2014-02-17 14:53:59.613033047 +0000 ++++ src/cmd/ksh93/features/options 2007-12-20 18:01:26.000000000 +0000 @@ -36,7 +36,7 @@ tst cross{ option TEST_L $? test -f /etc/ksh.kshrc -o -f /etc/bash.bashrc && @@ -98,9 +99,20 @@ option UCB $? }end +--- src/cmd/ksh93/sh.1 ++++ src/cmd/ksh93/sh.1 2008-09-22 12:11:56.000000000 +0000 +@@ -200,7 +200,7 @@ separated by + .BR \(bv . + The standard output of each command but the last + is connected by a +-.IR pipe (2) ++.IR socketpair (2) + to the standard input of the next command. + Each command, + except possibly the last, --- src/cmd/ksh93/sh/main.c -+++ src/cmd/ksh93/sh/main.c 2014-02-17 14:59:07.103514563 +0000 -@@ -113,9 +113,9 @@ bool sh_source(Shell_t *shp, Sfio_t *iop ++++ src/cmd/ksh93/sh/main.c 2007-12-20 18:01:26.000000000 +0000 +@@ -113,9 +113,9 @@ int sh_source(Shell_t *shp, Sfio_t *iop, } #ifdef S_ISSOCK @@ -112,18 +124,18 @@ #endif int sh_main(int ac, char *av[], Shinit_f userinit) -@@ -184,7 +184,7 @@ int sh_main(int ac, char *av[], Shinit_f +@@ -179,7 +179,7 @@ int sh_main(int ac, char *av[], Shinit_f } - if(!sh_isoption(shp,SH_RC) && (sh_isoption(shp,SH_BASH) && !sh_isoption(shp,SH_POSIX) + if(!sh_isoption(SH_RC) && (sh_isoption(SH_BASH) && !sh_isoption(SH_POSIX) #if SHOPT_REMOTE - || !fstat(0, &statb) && REMOTE(statb.st_mode) + || !fstat(0, &statb) && REMOTE(statb) #endif )) - sh_onoption(shp,SH_RC); + sh_onoption(SH_RC); --- src/cmd/ksh93/sh/xec.c -+++ src/cmd/ksh93/sh/xec.c 2014-02-17 15:00:46.556316756 +0000 -@@ -978,7 +978,7 @@ int sh_exec(register Shell_t *shp,regist ++++ src/cmd/ksh93/sh/xec.c 2012-01-26 12:07:46.000000000 +0000 +@@ -1015,7 +1015,7 @@ int sh_exec(register const Shnode_t *t, { case TCOM: { @@ -132,17 +144,17 @@ char *trap; Namval_t *np, *nq, *last_table; struct ionod *io; -@@ -1097,7 +1097,7 @@ int sh_exec(register Shell_t *shp,regist +@@ -1131,7 +1131,7 @@ int sh_exec(register const Shnode_t *t, + comn = com[argn-1]; } io = t->tre.treio; - tryagain: - if(shp->envlist = argp = t->com.comset) + if((shp->envlist = argp = t->com.comset)) { - if(argn==0 || (np && (nv_isattr(np,BLT_DCL)||(!command && nv_isattr(np,BLT_SPC))))) + if(argn==0 || (np && nv_isattr(np,(BLT_DCL|BLT_SPC)))) { --- src/cmd/ksh93/tests/attributes.sh -+++ src/cmd/ksh93/tests/attributes.sh 2014-02-17 14:53:59.617033080 +0000 ++++ src/cmd/ksh93/tests/attributes.sh 2009-07-09 13:14:05.000000000 +0000 @@ -199,7 +199,7 @@ hello worldhello worldhello world [[ $v1 == "$b1" ]] || err_exit "v1=$v1 should be $b1" [[ $v2 == "$x" ]] || err_exit "v1=$v2 should be $x" @@ -153,7 +165,7 @@ unset var typeset -b var --- src/cmd/ksh93/tests/bracket.sh -+++ src/cmd/ksh93/tests/bracket.sh 2014-02-17 14:53:59.617033080 +0000 ++++ src/cmd/ksh93/tests/bracket.sh 2012-02-09 14:11:32.000000000 +0000 @@ -221,6 +221,10 @@ done [[ abcdcdabcde == {5}(ab|cd)e ]] || err_exit 'abcdcdabcd == {5}(ab|cd)e' ) || err_exit 'errors with {..}(...) patterns' @@ -174,7 +186,7 @@ then [[ -L "$file" ]] || err_exit '-L not working' [[ -L "$file"/ ]] && err_exit '-L with file/ not working' --- src/cmd/ksh93/tests/builtins.sh -+++ src/cmd/ksh93/tests/builtins.sh 2014-02-17 14:53:59.617033080 +0000 ++++ src/cmd/ksh93/tests/builtins.sh 2009-07-09 13:14:50.000000000 +0000 @@ -344,7 +344,7 @@ wait $pid1 (( $? == 1 )) || err_exit "wait not saving exit value" wait $pid2 @@ -185,7 +197,7 @@ for v in ${v//,/ } do v=${v#*:} --- src/cmd/ksh93/tests/coprocess.sh -+++ src/cmd/ksh93/tests/coprocess.sh 2014-02-17 14:53:59.617033080 +0000 ++++ src/cmd/ksh93/tests/coprocess.sh 2013-02-01 15:22:31.000000000 +0000 @@ -113,15 +113,15 @@ do cop=$! exp=Done @@ -266,7 +278,7 @@ $cat |& pid=$! --- src/cmd/ksh93/tests/locale.sh -+++ src/cmd/ksh93/tests/locale.sh 2014-02-17 15:02:01.480920975 +0000 ++++ src/cmd/ksh93/tests/locale.sh 2011-05-24 14:46:02.000000000 +0000 @@ -62,7 +62,7 @@ done # this locale is supported by ast on all platforms # EU for { decimal_point="," thousands_sep="." } @@ -306,8 +318,8 @@ fi ") got=$* -@@ -342,7 +342,7 @@ then LC_ALL=en_US.UTF-8 - LC_ALL=C.UTF-8 eval $'[[ $(print -r -- "$x") == $\'hello\\u[20ac]\\xee world\' ]]' || err_exit '%q with unicode and non-unicode not working' +@@ -336,7 +336,7 @@ then LC_ALL=en_US.UTF-8 + [[ $(print -r -- "$x") == $'hello\u[20ac]\xee world' ]] || err_exit '%q with unicode and non-unicode not working' if [[ $(whence od) ]] then got='68 65 6c 6c 6f e2 82 ac ee 20 77 6f 72 6c 64 0a' - [[ $(print -r -- "$x" | od -An -tx1) == "$got" ]] || err_exit "incorrect string from printf %q" @@ -316,7 +328,7 @@ fi --- src/cmd/ksh93/tests/options.sh -+++ src/cmd/ksh93/tests/options.sh 2014-02-17 14:53:59.617033080 +0000 ++++ src/cmd/ksh93/tests/options.sh 2012-01-16 16:50:59.000000000 +0000 @@ -510,7 +510,7 @@ z=$($SHELL 2>&1 -uc 'print ${X2345678901 [[ $z == *X23456789012345:* ]] || err_exit "error message garbled with set -u got $z" @@ -327,7 +339,7 @@ set -o pipefail (sleep $toolong;kill \$\$> /dev/null) & --- src/cmd/ksh93/tests/path.sh -+++ src/cmd/ksh93/tests/path.sh 2014-02-17 14:53:59.621033112 +0000 ++++ src/cmd/ksh93/tests/path.sh 2008-09-11 16:02:46.000000000 +0000 @@ -269,7 +269,7 @@ builtin getconf getconf UNIVERSE - att # override sticky default 'UNIVERSE = foo' @@ -338,7 +350,7 @@ PATH=$path --- src/cmd/ksh93/tests/pty.sh -+++ src/cmd/ksh93/tests/pty.sh 2014-02-17 14:53:59.621033112 +0000 ++++ src/cmd/ksh93/tests/pty.sh 2012-03-15 11:51:40.000000000 +0000 @@ -428,15 +428,16 @@ r echo repeat-3 # err_exit # @@ -359,7 +371,7 @@ exit $((Errors<125?Errors:125)) --- src/cmd/ksh93/tests/signal.sh -+++ src/cmd/ksh93/tests/signal.sh 2014-02-17 14:53:59.621033112 +0000 ++++ src/cmd/ksh93/tests/signal.sh 2011-05-20 13:25:48.000000000 +0000 @@ -285,10 +285,10 @@ then for exp in TERM VTALRM PIPE $SHELL <<- EOF foo() { return 0; } @@ -373,30 +385,19 @@ done > /dev/null EOF } 2>> /dev/null ---- src/cmd/ksh93/sh.1 -+++ src/cmd/ksh93/sh.1 2014-02-17 14:53:59.613033047 +0000 -@@ -200,7 +200,7 @@ separated by - .BR \(bv . - The standard output of each command but the last - is connected by a --.IR pipe (2) -+.IR socketpair (2) - to the standard input of the next command. - Each command, - except possibly the last, --- src/lib/libast/disc/memfatal.c -+++ src/lib/libast/disc/memfatal.c 2014-02-17 15:03:10.461477163 +0000 -@@ -86,7 +86,7 @@ memfatal_20130509(Vmdisc_t* disc) ++++ src/lib/libast/disc/memfatal.c 2009-07-09 13:30:39.000000000 +0000 +@@ -74,7 +74,7 @@ memfatal(void) { - if (!disc) - { -- malloc(0); -+ void * ptr = malloc(0); - if (!(disc = vmdisc(Vmregion, NiL))) - return -1; - } + Vmdisc_t* disc; + +- malloc(0); ++ void * ptr = malloc(0); + if (disc = vmdisc(Vmregion, NiL)) + disc->exceptf = nomalloc; + } --- src/lib/libast/features/align.c -+++ src/lib/libast/features/align.c 2014-02-17 14:53:59.621033112 +0000 ++++ src/lib/libast/features/align.c 2007-12-20 18:01:26.000000000 +0000 @@ -32,6 +32,7 @@ #include "FEATURE/common" @@ -406,7 +407,7 @@ union _u_ { --- src/lib/libast/features/botch.c -+++ src/lib/libast/features/botch.c 2014-02-17 15:03:39.981715158 +0000 ++++ src/lib/libast/features/botch.c 2007-12-20 18:01:26.000000000 +0000 @@ -27,6 +27,7 @@ * generate ast traps for botched standard prototypes */ @@ -414,10 +415,10 @@ +#include <stdio.h> #include <sys/types.h> - #include "FEATURE/common" + #include "FEATURE/lib" --- src/lib/libast/features/lib -+++ src/lib/libast/features/lib 2014-02-17 14:53:59.621033112 +0000 -@@ -487,14 +487,19 @@ tst lib_utime_now note{ utime works with ++++ src/lib/libast/features/lib 2007-12-20 18:01:26.000000000 +0000 +@@ -538,14 +538,19 @@ tst lib_utime_now note{ utime works with }end tst cross{ @@ -445,8 +446,8 @@ }end --- src/lib/libast/misc/procopen.c -+++ src/lib/libast/misc/procopen.c 2014-02-17 14:53:59.621033112 +0000 -@@ -601,7 +601,7 @@ procopen(const char* cmd, char** argv, c ++++ src/lib/libast/misc/procopen.c 2007-12-20 18:01:26.000000000 +0000 +@@ -599,7 +599,7 @@ procopen(const char* cmd, char** argv, c if (!fork()) { sfsprintf(path, sizeof(path), "%d", getppid()); @@ -456,7 +457,7 @@ } sleep(2); --- src/lib/libast/port/astwinsize.c -+++ src/lib/libast/port/astwinsize.c 2014-02-17 15:05:53.702793018 +0000 ++++ src/lib/libast/port/astwinsize.c 2012-02-03 08:58:43.000000000 +0000 @@ -29,6 +29,10 @@ #include <ast.h> #include <ast_tty.h> @@ -466,10 +467,21 @@ +#endif + #if defined(__STDPP__directive) && defined(__STDPP__hide) - __STDPP__directive pragma pp:hide sleep + __STDPP__directive pragma pp:hide ioctl sleep #else +@@ -36,10 +40,6 @@ __STDPP__directive pragma pp:hide ioctl + #define sleep ______sleep + #endif + +-#if _sys_ioctl +-#include <sys/ioctl.h> +-#endif +- + #if defined(TIOCGWINSZ) + #if _sys_stream && _sys_ptem + #include <sys/stream.h> --- src/lib/libast/sfio/sfstrtof.h -+++ src/lib/libast/sfio/sfstrtof.h 2014-02-17 14:53:59.621033112 +0000 ++++ src/lib/libast/sfio/sfstrtof.h 2007-12-20 18:01:26.000000000 +0000 @@ -54,7 +54,7 @@ #if !defined(S2F_function) @@ -479,9 +491,20 @@ #define S2F_type 2 #define S2F_scan 1 #ifndef elementsof +--- src/lib/libcmd/Mamfile ++++ src/lib/libcmd/Mamfile 2013-02-05 10:41:01.310073683 +0000 +@@ -897,7 +897,7 @@ exec - -e '/^b_[a-z_][a-z_0-9]*(/!d' \ + exec - -e 's/^b_//' \ + exec - -e 's/(.*//' \ + exec - -e 's/.*/CMDLIST(&)/' \ +-exec - | ++exec - cmdinit.c basename.c cat.c chgrp.c chmod.c chown.c cksum.c cmp.c comm.c cp.c cut.c dirname.c date.c expr.c fds.c fmt.c fold.c getconf.c head.c id.c join.c ln.c logname.c md5sum.c mkdir.c mkfifo.c mktemp.c mv.c paste.c pathchk.c pids.c rev.c rm.c rmdir.c stty.c sum.c sync.c tail.c tee.c tty.c uname.c uniq.c vmstate.c wc.c revlib.c wclib.c fts_fix.c lib.c | + exec - sort -u + exec - } > 1.${COTEMP}.h + exec - if cmp 2>/dev/null -s 1.${COTEMP}.h cmdlist.h --- src/lib/libcmd/chmod.c -+++ src/lib/libcmd/chmod.c 2014-02-17 14:53:59.621033112 +0000 -@@ -270,7 +270,7 @@ b_chmod(int argc, char** argv, Shbltin_t ++++ src/lib/libcmd/chmod.c 2011-05-20 13:28:58.000000000 +0000 +@@ -272,7 +272,7 @@ b_chmod(int argc, char** argv, Shbltin_t case FTS_SLNONE: if (chlink) { @@ -490,80 +513,3 @@ chmodf = lchmod; goto commit; #else ---- src/cmd/ksh93/tests/namespace.sh -+++ src/cmd/ksh93/tests/namespace.sh 2014-02-19 12:11:42.493794867 +0000 -@@ -27,6 +27,9 @@ alias err_exit='err_exit $LINENO' - - Command=${0##*/} - integer Errors=0 -+integer compiled=0 -+read -n4 c < $0 2> /dev/null -+[[ $c == *$'\ck'* ]] && let compiled=1 - - tmp=$(mktemp -dt) || { err_exit mktemp -dt failed; exit 1; } - trap "cd /; rm -rf $tmp" EXIT -@@ -117,6 +120,7 @@ namespace com.foo - } - [[ $(print -v .com.foo.container) == "${.com.foo.exp}" ]] || err_exit 'compound variables defined in a namespace not expanded the same outside and inside' - -+if (( compiled==0 )) ; then - namespace a.b - { - typeset -T x_t=( -@@ -126,7 +130,9 @@ namespace a.b - } - .a.b.x_t var - [[ $(var.pi) == 10 ]] || print -u2 'discipline functions for types in namespace not working' -+fi - -+if (( compiled==0 )) ; then - namespace com.foo.test1 - { - typeset -T x_t=( -@@ -137,6 +143,7 @@ namespace com.foo.test1 - } - .com.foo.test1.y_t v - [[ $(v.x.pr) == 9/5 ]] || err_exit '_.__ not working with nested types in a namespace' -+fi - - namespace a.b - { ---- src/cmd/ksh93/tests/wchar.sh -+++ src/cmd/ksh93/tests/wchar.sh 2014-02-19 14:09:16.651095254 +0000 -@@ -40,7 +40,7 @@ Command=${0##*/} - integer Errors=0 - - locales="en_US.UTF-8 en_US.ISO-8859-15 zh_CN.GB18030" --supported="C.UTF-8" -+supported="de_DE.UTF-8" - - for lc_all in $locales - do if [[ $($SHELL -c "LC_ALL=$lc_all || echo error" 2>&1) == "" ]] ---- src/cmd/ksh93/tests/treemove.sh -+++ src/cmd/ksh93/tests/treemove.sh 2014-02-19 15:06:17.998369193 +0000 -@@ -64,6 +64,9 @@ function err_exit - alias err_exit='err_exit $LINENO' - - integer Errors=0 -+integer compiled=0 -+read -n4 c < $0 2> /dev/null -+[[ $c == *$'\ck'* ]] && let compiled=1 - - function idempotent - { -@@ -236,6 +239,7 @@ exp='typeset -C res.a=(typeset -l -i val - [[ $(typeset -p res.a) == "$exp" ]] || err_exit 'typeset -m for compound variable in a type not working' - idempotent exp res.a 'typeset -C res' - -+if (( compiled != 1 )) ; then - unset c - compound c dummy - objstack_t c.ost -@@ -247,6 +251,7 @@ c.ost.popobj dummy - exp='typeset -C c=(objstack_t ost=(typeset -l -i st_n=1;st[0]=(obj=(typeset -l -i val=5))))' - [[ $(typeset -p c) == "$exp" ]] || err_exit 'typeset -m for types not working' - idempotent exp c "$(typeset -T)" -+fi - - unset c - typeset -p c ++++++ sigexec.c ++++++ --- /var/tmp/diff_new_pack.H72VXR/_old 2017-12-21 11:29:58.101721530 +0100 +++ /var/tmp/diff_new_pack.H72VXR/_new 2017-12-21 11:29:58.101721530 +0100 @@ -41,7 +41,7 @@ int main(int argc, char* argv[]) { - int ptm, pts, sig; + int ptm, pts; ssize_t len; static struct termios o; static struct winsize w; @@ -166,19 +166,16 @@ dup2(pts, 2); close(pts); close(ptm); - sa.sa_flags = SA_RESTART; - sa.sa_handler = SIG_IGN; - sigaction(SIGHUP, &sa, (struct sigaction*)0); if (ioctl (0, TIOCSCTTY, 1) < 0) { perror("pty: can not get controlling tty"); - exit(errno); + exit(1); } break; case -1: close(pts); close(ptm); perror("pty: can not fork"); - exit(errno); + exit(1); default: dup2(ptm, 0); close(pts); @@ -193,7 +190,7 @@ exit (0); if (errno == EINTR || errno == EAGAIN) continue; - return errno; + return 1; } ptr += p; len -= p; @@ -207,28 +204,24 @@ (void)sigfillset(&set); sigprocmask(SIG_UNBLOCK, &set, (sigset_t*)0); + (void)sigemptyset(&set); + (void)sigaddset(&set, SIGCHLD); + sigprocmask(SIG_BLOCK, &set, (sigset_t*)0); + sa.sa_flags = SA_RESTART; sa.sa_handler = SIG_DFL; sigemptyset (&sa.sa_mask); - for (sig = 1; sig < _NSIG; sig++) { - - if (sig == SIGKILL || sig == SIGSTOP) - continue; - - if (sig == SIGQUIT) - continue; - - if ((sigaction(sig, &sa, (struct sigaction*)0) < 0)) - if (errno != EINVAL) - return errno; - } + sigaction(SIGHUP, &sa, (struct sigaction*)0); + sigaction(SIGINT, &sa, (struct sigaction*)0); + sigaction(SIGPIPE, &sa, (struct sigaction*)0); + sigaction(SIGTERM, &sa, (struct sigaction*)0); + sigaction(SIGURG, &sa, (struct sigaction*)0); + sigaction(SIGXFSZ, &sa, (struct sigaction*)0); + sigaction(SIGQUIT, &sa, (struct sigaction*)0); sa.sa_handler = SIG_IGN; sigaction(SIGQUIT, &sa, (struct sigaction*)0); - if (setenv("USESIGEXEC", "0", 1) < 0) - return errno; - - return execv(argv[1], &argv[1]); + return execv(argv[1], &argv[1]); } ++++++ workaround-stupid-build-system.diff ++++++ --- /var/tmp/diff_new_pack.H72VXR/_old 2017-12-21 11:29:58.129720164 +0100 +++ /var/tmp/diff_new_pack.H72VXR/_new 2017-12-21 11:29:58.129720164 +0100 @@ -1,5 +1,5 @@ --- src/cmd/INIT/Mamfile -+++ src/cmd/INIT/Mamfile 2014-02-17 15:18:52.481030284 +0000 ++++ src/cmd/INIT/Mamfile 2008-02-14 12:08:37.000000000 +0000 @@ -5,7 +5,7 @@ setv AR ${mam_cc_AR} ${mam_cc_AR_ARFLAGS setv ARFLAGS rc setv AS as @@ -19,8 +19,8 @@ setv TAR tar setv YACC yacc --- src/cmd/INIT/iffe.sh -+++ src/cmd/INIT/iffe.sh 2014-02-17 15:18:52.481030284 +0000 -@@ -1186,7 +1186,7 @@ case `(getopts '[-][123:xyz]' opt --xyz; ++++ src/cmd/INIT/iffe.sh 2008-02-14 12:15:59.000000000 +0000 +@@ -1170,7 +1170,7 @@ case `(getopts '[-][123:xyz]' opt --xyz; --*) echo $command: $1: unknown option >&2 exit 2 ;; @@ -30,7 +30,7 @@ *) break ;; --- src/cmd/INIT/mamake.c -+++ src/cmd/INIT/mamake.c 2014-02-17 15:18:52.485030316 +0000 ++++ src/cmd/INIT/mamake.c 2008-02-14 12:08:37.000000000 +0000 @@ -118,7 +118,7 @@ USAGE_LICENSE #define set(b,o) ((b)->nxt=(b)->buf+(o)) #define use(b) (*(b)->nxt=0,(b)->nxt=(b)->buf) @@ -85,7 +85,7 @@ } --- src/cmd/ksh93/Mamfile -+++ src/cmd/ksh93/Mamfile 2014-07-02 12:15:12.166235595 +0000 ++++ src/cmd/ksh93/Mamfile 2012-02-10 14:30:31.000000000 +0000 @@ -7,7 +7,7 @@ setv AR ${mam_cc_AR} ${mam_cc_AR_ARFLAGS setv ARFLAGS rc setv AS as @@ -104,42 +104,43 @@ setv SILENT setv TAR tar setv YACC yacc -@@ -1441,7 +1441,7 @@ bind -lshell - prev +ljobs +@@ -1337,7 +1337,7 @@ prev +ljobs prev +li + prev ${mam_libsocket} prev ${mam_libsecdb} --exec - ${CC} ${CCLDFLAGS} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -o ksh pmain.o ${mam_libshell} ${mam_libast} -+exec - ${CC} ${CCLDFLAGS} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -o ksh pmain.o ${mam_libshell} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libast} +-exec - ${CC} ${CCLDFLAGS} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -o ksh pmain.o ${mam_libshell} ${mam_libnsl} ${mam_libast} ++exec - ${CC} ${CCLDFLAGS} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -o ksh pmain.o ${mam_libshell} ${mam_libnsl} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libast} done ksh generated make shcomp make shcomp.o -@@ -1464,7 +1464,7 @@ prev +li +@@ -1361,7 +1361,7 @@ prev ${mam_libsocket} prev ${mam_libsecdb} setv CC.DLL -UCC.DLL setv SH_DICT -DSH_DICT="\"libshell\"" --exec - ${CC} ${CCLDFLAGS} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -o shcomp shcomp.o ${mam_libshell} ${mam_libast} -+exec - ${CC} ${CCLDFLAGS} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -o shcomp shcomp.o ${mam_libshell} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libast} +-exec - ${CC} ${CCLDFLAGS} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -o shcomp shcomp.o ${mam_libshell} ${mam_libnsl} ${mam_libast} ++exec - ${CC} ${CCLDFLAGS} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -o shcomp shcomp.o ${mam_libshell} ${mam_libnsl} ${mam_libcmd} ${mam_libast} ${mam_libm} ${mam_libast} done shcomp generated make suid_exec make suid_exec.o -@@ -1480,13 +1480,13 @@ meta suid_exec.o %.c>%.o sh/suid_exec.c +@@ -1377,14 +1377,14 @@ meta suid_exec.o %.c>%.o sh/suid_exec.c prev sh/suid_exec.c setv CC.DLL -UCC.DLL setv _BLD_shell -U_BLD_shell --exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DERROR_CONTEXT_T=Error_context_t -D_API_ast=20130625 -D_PACKAGE_ast -c sh/suid_exec.c -+exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -fPIE -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DERROR_CONTEXT_T=Error_context_t -D_API_ast=20130625 -D_PACKAGE_ast -c sh/suid_exec.c +-exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DERROR_CONTEXT_T=Error_context_t -D_API_ast=20100309 -D_PACKAGE_ast -c sh/suid_exec.c ++exec - ${CC} ${mam_cc_FLAGS} ${CCFLAGS} -fPIE -I. -Iinclude -I${PACKAGE_ast_INCLUDE} -DERROR_CONTEXT_T=Error_context_t -D_API_ast=20100309 -D_PACKAGE_ast -c sh/suid_exec.c done suid_exec.o generated prev +ljobs prev +li + prev ${mam_libsocket} prev ${mam_libsecdb} setv CC.DLL -UCC.DLL --exec - ${CC} ${CCLDFLAGS} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ${mam_cc_L+-L${INSTALLROOT}/lib} -o suid_exec suid_exec.o ${mam_libast} ${mam_libast} -+exec - ${CC} ${CCLDFLAGS} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ${mam_cc_L+-L${INSTALLROOT}/lib} -pie -o suid_exec suid_exec.o ${mam_libast} ${mam_libast} +-exec - ${CC} ${CCLDFLAGS} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -o suid_exec suid_exec.o ${mam_libast} ${mam_libnsl} ${mam_libast} ++exec - ${CC} ${CCLDFLAGS} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ${mam_cc_L+-L.} ${mam_cc_L+-L${INSTALLROOT}/lib} -pie -o suid_exec suid_exec.o ${mam_libast} ${mam_libnsl} ${mam_libast} done suid_exec generated - make bash - prev ksh + make shell + prev libshell.a archive --- src/lib/libast/Mamfile -+++ src/lib/libast/Mamfile 2014-02-17 15:18:52.485030316 +0000 ++++ src/lib/libast/Mamfile 2013-02-05 15:08:23.757451837 +0000 @@ -5,7 +5,7 @@ setv AR ${mam_cc_AR} ${mam_cc_AR_ARFLAGS setv ARFLAGS rc setv AS as @@ -158,7 +159,7 @@ setv SILENT setv TAR tar setv YACC yacc -@@ -1095,7 +1095,7 @@ make lcgen +@@ -1003,7 +1003,7 @@ make lcgen make port/lcgen.c prev std/stdio.h implicit done port/lcgen.c @@ -167,7 +168,7 @@ done lcgen generated make port/lc.tab done port/lc.tab -@@ -7586,58 +7586,31 @@ exec - test '' = 'misc/magic.tab' || ${S +@@ -7291,58 +7291,31 @@ exec - test '' = 'misc/magic.tab' || ${S done ${INSTALLROOT}/lib/file/magic generated prev comp/fmtmsg.h prev ast_lib.h @@ -230,7 +231,7 @@ make test done test dontcare virtual --- src/lib/libcmd/Mamfile -+++ src/lib/libcmd/Mamfile 2014-02-17 15:18:52.485030316 +0000 ++++ src/lib/libcmd/Mamfile 2013-02-05 15:13:53.797951789 +0000 @@ -7,7 +7,7 @@ setv AR ${mam_cc_AR} ${mam_cc_AR_ARFLAGS setv ARFLAGS rc setv AS as @@ -250,7 +251,7 @@ setv TAR tar setv YACC yacc --- src/lib/libdll/Mamfile -+++ src/lib/libdll/Mamfile 2014-02-17 15:18:52.485030316 +0000 ++++ src/lib/libdll/Mamfile 2008-02-14 12:08:37.000000000 +0000 @@ -7,7 +7,7 @@ setv AR ${mam_cc_AR} ${mam_cc_AR_ARFLAGS setv ARFLAGS rc setv AS as @@ -271,7 +272,7 @@ setv YACC yacc --- src/lib/libpp/Mamfile +++ src/lib/libpp/Mamfile 2012-01-24 18:31:22.000000000 +0000 -@@ -675,7 +675,7 @@ exec - . +@@ -663,7 +663,7 @@ exec - . exec - w exec - q exec - ! @@ -280,7 +281,7 @@ exec - ./${COTEMP}.exe > pp.yacc exec - rm -f 1.${COTEMP}.c ${COTEMP}.exe done pp.yacc generated -@@ -717,7 +717,7 @@ exec - . +@@ -705,7 +705,7 @@ exec - . exec - w exec - q exec - ! @@ -289,42 +290,3 @@ exec - ./${COTEMP}.exe > ppkey.yacc exec - rm -f 1.${COTEMP}.c ${COTEMP}.exe done ppkey.yacc generated ---- src/cmd/builtin/Mamfile -+++ src/cmd/builtin/Mamfile 2014-02-20 11:36:55.598747064 +0000 -@@ -384,36 +384,6 @@ done who.o generated - setv CMD_STANDALONE -DCMD_STANDALONE="b_who" - exec - ${CC} ${CCLDFLAGS} ${mam_cc_FLAGS} ${CCFLAGS} ${LDFLAGS} ${mam_cc_L+-L${INSTALLROOT}/lib} -o who who.o ${mam_libast} ${mam_libcmd} - done who generated --make ln --make cp --done cp --exec - if silent test -f "ln" --exec - then ${STDRM} -f ln --exec - fi --exec - ${STDLN} cp ln --done ln generated --make mv --prev cp --exec - if silent test -f "mv" --exec - then ${STDRM} -f mv --exec - fi --exec - ${STDLN} cp mv --done mv generated --make md5sum --make cksum --done cksum --exec - if silent test -f "md5sum" --exec - then ${STDRM} -f md5sum --exec - fi --exec - ${STDLN} cksum md5sum --done md5sum generated --make sum --prev cksum --exec - if silent test -f "sum" --exec - then ${STDRM} -f sum --exec - fi --exec - ${STDLN} cksum sum --done sum generated - make ${INSTALLROOT}/bin - exec - if silent test ! -d ${INSTALLROOT}/bin - exec - then mkdir -p ${INSTALLROOT}/bin