diff options
author | Roger A. Faulkner <Roger.Faulkner@Oracle.COM> | 2010-04-03 09:48:44 -0700 |
---|---|---|
committer | Roger A. Faulkner <Roger.Faulkner@Oracle.COM> | 2010-04-03 09:48:44 -0700 |
commit | 3e14f97f673e8a630f076077de35afdd43dc1587 (patch) | |
tree | 9828b6b676f58d7b27dd28e00202d3f3461a5cd8 /usr/src/lib/libshell/common/sh/fault.c | |
parent | 4f60987df4dcaa54a88b596f861fbf4f3382c65e (diff) | |
download | illumos-gate-3e14f97f673e8a630f076077de35afdd43dc1587.tar.gz |
6939349 RFE: Update ksh93 to ast-ksh.2010-03-09
6877392 ksh93 regresses 'uniq -c' performance
6887363 Korn shell 93 sometimes mishandles return value of its child process
6900314 (while true ; do true|true ; done) hang in ioctl() with SIGTTOU
6904557 wc no longer counts number of bytes correctly
6904575 cut -d with multibyte character no longer works
6904597 paste -d no longer works with multibyte characters
6904780 /usr/bin/cksum changed output in snv_128
6904870 uniq -s does not skip multibyte characters correctly
6904878 join -t no longer works with multibyte char separator
6907460 EXIT trap handlers are sometimes executed twice
6909579 libast getopt solaris compatibility broken
6920072 ksh93 tail -f, with unconditional .25s sleep and line parsing, about 37x slower than cat
6932124 mktemp in ksh93 is broken
Contributed by Olga Kryzhanovska <olga.kryzhanovska@gmail.com>
Diffstat (limited to 'usr/src/lib/libshell/common/sh/fault.c')
-rw-r--r-- | usr/src/lib/libshell/common/sh/fault.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/usr/src/lib/libshell/common/sh/fault.c b/usr/src/lib/libshell/common/sh/fault.c index fc90ad573e..e7bb6f9fad 100644 --- a/usr/src/lib/libshell/common/sh/fault.c +++ b/usr/src/lib/libshell/common/sh/fault.c @@ -1,7 +1,7 @@ /*********************************************************************** * * * This software is part of the ast package * -* Copyright (c) 1982-2009 AT&T Intellectual Property * +* Copyright (c) 1982-2010 AT&T Intellectual Property * * and is licensed under the * * Common Public License, Version 1.0 * * by AT&T Intellectual Property * @@ -362,7 +362,8 @@ void sh_sigclear(register int sig) flag &= ~(SH_SIGTRAP|SH_SIGSET); if(trap=sh.st.trapcom[sig]) { - free(trap); + if(!sh.subshell) + free(trap); sh.st.trapcom[sig]=0; } sh.sigflag[sig] = flag; @@ -404,11 +405,13 @@ void sh_chktrap(void) #ifdef SHOPT_BGX if((sh.sigflag[SIGCHLD]&SH_SIGTRAP) && sh.st.trapcom[SIGCHLD]) job_chldtrap(&sh,sh.st.trapcom[SIGCHLD],1); - while(--sig>=0 && sig!=SIGCHLD) -#else - while(--sig>=0) #endif /* SHOPT_BGX */ + while(--sig>=0) { +#ifdef SHOPT_BGX + if(sig==SIGCHLD) + continue; +#endif /* SHOPT_BGX */ if(sh.sigflag[sig]&SH_SIGTRAP) { sh.sigflag[sig] &= ~SH_SIGTRAP; @@ -437,9 +440,11 @@ int sh_trap(const char *trap, int mode) int was_verbose = sh_isstate(SH_VERBOSE); int staktop = staktell(); char *savptr = stakfreeze(0); + char ifstable[256]; struct checkpt buff; Fcin_t savefc; fcsave(&savefc); + memcpy(ifstable,shp->ifstable,sizeof(ifstable)); sh_offstate(SH_HISTORY); sh_offstate(SH_VERBOSE); shp->intrap++; @@ -477,6 +482,7 @@ int sh_trap(const char *trap, int mode) shp->exitval=savxit; stakset(savptr,staktop); fcrestore(&savefc); + memcpy(shp->ifstable,ifstable,sizeof(ifstable)); if(was_history) sh_onstate(SH_HISTORY); if(was_verbose) |