* SUGGESTION: kill -l could show numbers, too @ 2004-11-18 14:52 Christian Höltje 2004-11-18 16:05 ` Peter Stephenson 0 siblings, 1 reply; 11+ messages in thread From: Christian Höltje @ 2004-11-18 14:52 UTC (permalink / raw) To: zsh-workers I have a suggestion for the kill builtin: It would be nice if when you did '-l' to show the list of signal that it show the signal number. I saw this on a friends system where it did the following: 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 33) SIGRTMIN 34) SIGRTMIN+1 35) SIGRTMIN+2 36) SIGRTMIN+3 37) SIGRTMIN+4 38) SIGRTMIN+5 39) SIGRTMIN+6 40) SIGRTMIN+7 41) SIGRTMIN+8 42) SIGRTMIN+9 43) SIGRTMIN+10 44) SIGRTMIN+11 45) SIGRTMIN+12 46) SIGRTMIN+13 47) SIGRTMIN+14 48) SIGRTMIN+15 49) SIGRTMAX-15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX I thought it was a keen feature. I'm not sure listing everything plus the kitchen sink is actually worthwhile, but if only for the ones that show up by default in the current version. Ciao! -- ...experience declares that man is the only animal which devours his own kind, for I can apply no milder term to the governments of Europe, and to the general prey of the rich on the poor. -- Thomas Jefferson to Edward Carrington, 16 Jan 1787 The Doctor What: Da Man http://docwhat.gerf.org/ docwhat *at* gerf *dot* org KF6VNC Outgoing mail is certified Virus Free. Checked by Debian GNU/Linux (http://www.debian.org). Version: 3.0 / 9368 out of 12296 packages installed ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: SUGGESTION: kill -l could show numbers, too 2004-11-18 14:52 SUGGESTION: kill -l could show numbers, too Christian Höltje @ 2004-11-18 16:05 ` Peter Stephenson 2004-11-18 16:12 ` Dan Nelson ` (2 more replies) 0 siblings, 3 replies; 11+ messages in thread From: Peter Stephenson @ 2004-11-18 16:05 UTC (permalink / raw) To: zsh-workers Christian =?iso-8859-1?Q?H=F6ltje?= wrote: > I have a suggestion for the kill builtin: > > It would be nice if when you did '-l' to show the list of signal > that it show the signal number. Not quite as convenient, but try this function: kill-l() { for i in {1..$#signals}; do print $((i-1))\) SIG$signals[$i] done | pr -t5 } -- Peter Stephenson <pws@csr.com> Software Engineer CSR PLC, Churchill House, Cambridge Business Park, Cowley Road Cambridge, CB4 0WZ, UK Tel: +44 (0)1223 692070 ********************************************************************** This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This footnote also confirms that this email message has been swept by MIMEsweeper for the presence of computer viruses. www.mimesweeper.com ********************************************************************** ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: SUGGESTION: kill -l could show numbers, too 2004-11-18 16:05 ` Peter Stephenson @ 2004-11-18 16:12 ` Dan Nelson 2004-11-18 16:33 ` Bart Schaefer 2004-11-18 16:39 ` SUGGESTION: kill -l could show numbers, too (+CLD vs CHLD) Stephane Chazelas 2 siblings, 0 replies; 11+ messages in thread From: Dan Nelson @ 2004-11-18 16:12 UTC (permalink / raw) To: Peter Stephenson; +Cc: zsh-workers In the last episode (Nov 18), Peter Stephenson said: > Christian =?iso-8859-1?Q?H=F6ltje?= wrote: > > I have a suggestion for the kill builtin: > > > > It would be nice if when you did '-l' to show the list of signal > > that it show the signal number. > > Not quite as convenient, but try this function: > > kill-l() { > for i in {1..$#signals}; do > print $((i-1))\) SIG$signals[$i] > done | pr -t5 > } You probably want to strip ZERR and DEBUG out of that list beforehand :) -- Dan Nelson dnelson@allantgroup.com ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: SUGGESTION: kill -l could show numbers, too 2004-11-18 16:05 ` Peter Stephenson 2004-11-18 16:12 ` Dan Nelson @ 2004-11-18 16:33 ` Bart Schaefer 2004-11-18 16:50 ` Stephane Chazelas 2004-11-18 16:39 ` SUGGESTION: kill -l could show numbers, too (+CLD vs CHLD) Stephane Chazelas 2 siblings, 1 reply; 11+ messages in thread From: Bart Schaefer @ 2004-11-18 16:33 UTC (permalink / raw) To: zsh-workers On Thu, 18 Nov 2004, Peter Stephenson wrote: > kill-l() { > for i in {1..$#signals}; do > print $((i-1))\) SIG$signals[$i] > done | pr -t5 > } Which can be rewritten as a wrapper, and without the pipe to "pr": kill() { case $1 in (-l) integer i=0 print -c ${(e)signals//*/\$((i++))\) SIG\$signals[\$i]} ;; (*) command kill "$@" ;; esac } ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: SUGGESTION: kill -l could show numbers, too 2004-11-18 16:33 ` Bart Schaefer @ 2004-11-18 16:50 ` Stephane Chazelas 0 siblings, 0 replies; 11+ messages in thread From: Stephane Chazelas @ 2004-11-18 16:50 UTC (permalink / raw) To: zsh-workers On Thu, Nov 18, 2004 at 08:33:04AM -0800, Bart Schaefer wrote: [...] > Which can be rewritten as a wrapper, and without the pipe to "pr": > > kill() { > case $1 in > (-l) > integer i=0 > print -c ${(e)signals//*/\$((i++))\) SIG\$signals[\$i]} > ;; > (*) > command kill "$@" [...] Rather: builtin kill "$@" And you need to check the number of arguments (for kill -l TERM for instance) kill() { if (( $# == 1 )) && [[ $1 = "-l" ]]; then integer i=0 print -rc ${(e)signals//*/\$((i++))\) SIG\$signals[\$i]} else builtin kill "$@" fi } -- Stephane ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: SUGGESTION: kill -l could show numbers, too (+CLD vs CHLD) 2004-11-18 16:05 ` Peter Stephenson 2004-11-18 16:12 ` Dan Nelson 2004-11-18 16:33 ` Bart Schaefer @ 2004-11-18 16:39 ` Stephane Chazelas 2004-11-18 17:22 ` Peter Stephenson 2 siblings, 1 reply; 11+ messages in thread From: Stephane Chazelas @ 2004-11-18 16:39 UTC (permalink / raw) To: zsh-workers On Thu, Nov 18, 2004 at 04:05:17PM +0000, Peter Stephenson wrote: > Christian =?iso-8859-1?Q?H=F6ltje?= wrote: > > I have a suggestion for the kill builtin: > > > > It would be nice if when you did '-l' to show the list of signal > > that it show the signal number. > > Not quite as convenient, but try this function: > > kill-l() { > for i in {1..$#signals}; do > print $((i-1))\) SIG$signals[$i] > done | pr -t5 > } [...] Or, to avoid "pr": kill-l () { local -a s for i in {1..$#signals} do s[i]="$((i-1))) SIG$signals[$i]" done print -C5 $s } BTW, I noted some discrepancies on the result of kill -l between various shells and /bin/kill on that Linux-i386: bash bin csh dash ksh pdksh zsh ABRT ABRT ABRT ABRT IOT ABRT ABRT STKFLT STKFLT 16 SIG16 STKFLT STKFLT CHLD CHLD CHLD CHLD CHLD CHLD CLD IO POLL POLL IO POLL IO POLL SYS SYS SYS SYS SYS UNUSED SYS Why SIGCLD and not SIGCHLD for zsh? SUSv3 (POSIX) seems to require SIGCHLD http://www.opengroup.org/onlinepubs/009695399/basedefs/signal.h.html http://www.opengroup.org/onlinepubs/009695399/utilities/trap.html -- Stéphane ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: SUGGESTION: kill -l could show numbers, too (+CLD vs CHLD) 2004-11-18 16:39 ` SUGGESTION: kill -l could show numbers, too (+CLD vs CHLD) Stephane Chazelas @ 2004-11-18 17:22 ` Peter Stephenson 2004-11-19 9:59 ` Peter Stephenson 0 siblings, 1 reply; 11+ messages in thread From: Peter Stephenson @ 2004-11-18 17:22 UTC (permalink / raw) To: zsh-workers Stephane Chazelas wrote: > Why SIGCLD and not SIGCHLD for zsh? It's an artefact of this sort of thing in header files: #define SIGCLD SIGCHLD /* Same as SIGCHLD (System V). */ #define SIGCHLD 17 /* Child status has changed (POSIX). */ We pick the first one, assuming that's to be preferred. The following explicitly prefers SIGCHLD. Any other multiple signals can be handled similarly. I'm not sure about SIGPOLL. Maybe we should think about mapping alternatives so that both kill -CLD and kill -CHLD work. Index: Src/signames2.awk =================================================================== RCS file: /cvsroot/zsh/zsh/Src/signames2.awk,v retrieving revision 1.3 diff -u -r1.3 signames2.awk --- Src/signames2.awk 12 Mar 2004 09:59:24 -0000 1.3 +++ Src/signames2.awk 18 Nov 2004 17:15:22 -0000 @@ -12,6 +12,7 @@ split(sigtail, tmp) signam = substr(tmp[1], 4, 20) signum = tmp[2] + if (signam == "CHLD" && sig[signum] == "CLD") sig[signum] = "" if (sig[signum] == "") { sig[signum] = signam if (0 + max < 0 + signum && signum < 60) -- Peter Stephenson <pws@csr.com> Software Engineer CSR PLC, Churchill House, Cambridge Business Park, Cowley Road Cambridge, CB4 0WZ, UK Tel: +44 (0)1223 692070 ********************************************************************** This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This footnote also confirms that this email message has been swept by MIMEsweeper for the presence of computer viruses. www.mimesweeper.com ********************************************************************** ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: SUGGESTION: kill -l could show numbers, too (+CLD vs CHLD) 2004-11-18 17:22 ` Peter Stephenson @ 2004-11-19 9:59 ` Peter Stephenson 2004-11-19 15:34 ` Bart Schaefer 2004-11-20 19:29 ` Peter Stephenson 0 siblings, 2 replies; 11+ messages in thread From: Peter Stephenson @ 2004-11-19 9:59 UTC (permalink / raw) To: zsh-workers Peter Stephenson wrote: > The following explicitly prefers SIGCHLD. Any other multiple signals > can be handled similarly. I'm not sure about SIGPOLL. It looks like SIGPOLL is standardised, though from X/Open rather than Posix, while SIGIO isn't (although it has a long history, too). So I've made it prefer SIGPOLL to SIGIO. This doesn't actually change anything on Linux. I'm working on something to allow variants on input. This is easy enough for kill, the real killer is function-style traps. -- Peter Stephenson <pws@csr.com> Software Engineer CSR PLC, Churchill House, Cambridge Business Park, Cowley Road Cambridge, CB4 0WZ, UK Tel: +44 (0)1223 692070 ********************************************************************** This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This footnote also confirms that this email message has been swept by MIMEsweeper for the presence of computer viruses. www.mimesweeper.com ********************************************************************** ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: SUGGESTION: kill -l could show numbers, too (+CLD vs CHLD) 2004-11-19 9:59 ` Peter Stephenson @ 2004-11-19 15:34 ` Bart Schaefer 2004-11-19 16:02 ` Peter Stephenson 2004-11-20 19:29 ` Peter Stephenson 1 sibling, 1 reply; 11+ messages in thread From: Bart Schaefer @ 2004-11-19 15:34 UTC (permalink / raw) To: zsh-workers On Fri, 19 Nov 2004, Peter Stephenson wrote: > made it prefer SIGPOLL to SIGIO. If they don't have the same signal number, they still both appear, right? > the real killer is function-style traps. No pun intended. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: SUGGESTION: kill -l could show numbers, too (+CLD vs CHLD) 2004-11-19 15:34 ` Bart Schaefer @ 2004-11-19 16:02 ` Peter Stephenson 0 siblings, 0 replies; 11+ messages in thread From: Peter Stephenson @ 2004-11-19 16:02 UTC (permalink / raw) To: zsh-workers Bart Schaefer wrote: > On Fri, 19 Nov 2004, Peter Stephenson wrote: > > > made it prefer SIGPOLL to SIGIO. > > If they don't have the same signal number, they still both appear, right? Yes, the test is looking for signals with the same number. > > the real killer is function-style traps. > > No pun intended. Speak for yourself. -- Peter Stephenson <pws@csr.com> Software Engineer CSR PLC, Churchill House, Cambridge Business Park, Cowley Road Cambridge, CB4 0WZ, UK Tel: +44 (0)1223 692070 ********************************************************************** This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This footnote also confirms that this email message has been swept by MIMEsweeper for the presence of computer viruses. www.mimesweeper.com ********************************************************************** ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: SUGGESTION: kill -l could show numbers, too (+CLD vs CHLD) 2004-11-19 9:59 ` Peter Stephenson 2004-11-19 15:34 ` Bart Schaefer @ 2004-11-20 19:29 ` Peter Stephenson 1 sibling, 0 replies; 11+ messages in thread From: Peter Stephenson @ 2004-11-20 19:29 UTC (permalink / raw) To: zsh-workers Peter Stephenson wrote: > I'm working on something to allow variants on input. This is easy > enough for kill, the real killer is function-style traps. The following appears to be Not Completely Broken (TM), although I put some weasel words into the documentation. Index: Doc/Zsh/builtins.yo =================================================================== RCS file: /cvsroot/zsh/zsh/Doc/Zsh/builtins.yo,v retrieving revision 1.71 diff -u -r1.71 builtins.yo --- Doc/Zsh/builtins.yo 5 Oct 2004 10:39:43 -0000 1.71 +++ Doc/Zsh/builtins.yo 20 Nov 2004 19:10:32 -0000 @@ -626,6 +626,14 @@ listed. For each var(sig) that is a signal number or a number representing the exit status of a process which was terminated or stopped by a signal the name of the signal is printed. + +On some systems, alternative signal names are allowed for a few signals. +Typical examples are tt(SIGCHLD) and tt(SIGCLD) or tt(SIGPOLL) and +tt(SIGIO), assuming they correspond to the same signal number. tt(kill +-l) will only list the preferred form, however tt(kill -l) var(alt) will +show if the alternative form corresponds to a signal number. For example, +under Linux tt(kill -l IO) and tt(kill -l POLL) both output 29, hence +tt(kill -IO) and tt(kill -POLL) have the same effect. ) findex(let) item(tt(let) var(arg) ...)( @@ -1179,6 +1187,11 @@ example(TRAPDEBUG() { print $LINENO; }) will always print the number zero. + +Alternative signal names are allowed as described under tt(kill) above. +Defining a trap under either name causes any trap under an alternative +name to be removed. However, it is recommended that for consistency +users stick exclusively to one name or another. ) findex(true) cindex(doing nothing, successfully) Index: Src/builtin.c =================================================================== RCS file: /cvsroot/zsh/zsh/Src/builtin.c,v retrieving revision 1.131 diff -u -r1.131 builtin.c --- Src/builtin.c 21 Oct 2004 00:33:50 -0000 1.131 +++ Src/builtin.c 20 Nov 2004 19:11:34 -0000 @@ -2543,7 +2543,16 @@ /* no flags, so just print */ shfunctab->printnode((HashNode) shf, pflags); } else if (on & PM_UNDEFINED) { - int signum, ok = 1; + int signum = -1, ok = 1; + + if (!strncmp(*argv, "TRAP", 4) && + (signum = getsignum(*argv + 4)) != -1) { + /* + * Because of the possibility of alternative names, + * we must remove the trap explicitly. + */ + removetrapnode(signum); + } /* Add a new undefined (autoloaded) function to the * * hash table with the corresponding flags set. */ @@ -2552,8 +2561,7 @@ shf->funcdef = mkautofn(shf); shfunctab->addnode(shfunctab, ztrdup(*argv), shf); - if (!strncmp(*argv, "TRAP", 4) && - (signum = getsignum(*argv + 4)) != -1) { + if (signum != -1) { if (settrap(signum, shf->funcdef)) { shfunctab->removenode(shfunctab, *argv); shfunctab->freenode((HashNode)shf); @@ -4898,11 +4906,9 @@ queue_signals(); for (sig = 0; sig < VSIGCOUNT; sig++) { if (sigtrapped[sig] & ZSIG_FUNC) { - char fname[20]; HashNode hn; - sprintf(fname, "TRAP%s", sigs[sig]); - if ((hn = shfunctab->getnode(shfunctab, fname))) + if ((hn = gettrapnode(sig, 0))) shfunctab->printnode(hn, 0); DPUTS(!hn, "BUG: I did not find any trap functions!"); } else if (sigtrapped[sig]) { Index: Src/exec.c =================================================================== RCS file: /cvsroot/zsh/zsh/Src/exec.c,v retrieving revision 1.77 diff -u -r1.77 exec.c --- Src/exec.c 29 Oct 2004 10:14:34 -0000 1.77 +++ Src/exec.c 20 Nov 2004 19:12:13 -0000 @@ -3345,6 +3345,12 @@ return 1; } sigtrapped[signum] |= ZSIG_FUNC; + + /* + * Remove the old node explicitly in case it has + * an alternative name + */ + removetrapnode(signum); } shfunctab->addnode(shfunctab, ztrdup(s), shf); } Index: Src/jobs.c =================================================================== RCS file: /cvsroot/zsh/zsh/Src/jobs.c,v retrieving revision 1.35 diff -u -r1.35 jobs.c --- Src/jobs.c 22 Oct 2004 19:38:59 -0000 1.35 +++ Src/jobs.c 20 Nov 2004 19:12:34 -0000 @@ -1819,6 +1819,36 @@ return retval; } +#if defined(SIGCHLD) && defined(SIGCLD) +#if SIGCHLD == SIGCLD +#define ALT_SIGS 1 +#endif +#endif +#if defined(SIGPOLL) && defined(SIGIO) +#if SIGPOLL == SIGIO +#define ALT_SIGS 1 +#endif +#endif + +#ifdef ALT_SIGS +const struct { + const char *name; + int num; +} alt_sigs[] = { +#if defined(SIGCHLD) && defined(SIGCLD) +#if SIGCHLD == SIGCLD + { "CLD", SIGCLD }, +#endif +#endif +#if defined(SIGPOLL) && defined(SIGIO) +#if SIGPOLL == SIGIO + { "IO", SIGIO }, +#endif +#endif + { NULL, 0 } +}; +#endif + /* kill: send a signal to a process. The process(es) may be specified * * by job specifier (see above) or pid. A signal, defaulting to * * SIGTERM, may be specified by name or number, preceded by a dash. */ @@ -1847,6 +1877,18 @@ for (sig = 1; sig <= SIGCOUNT; sig++) if (!cstrpcmp(sigs + sig, &signame)) break; +#ifdef ALT_SIGS + if (sig > SIGCOUNT) { + int i; + + for (i = 0; alt_sigs[i].name; i++) + if (!cstrpcmp(&alt_sigs[i].name, &signame)) + { + sig = alt_sigs[i].num; + break; + } + } +#endif if (sig > SIGCOUNT) { zwarnnam(nam, "unknown signal: SIG%s", signame, 0); @@ -1908,6 +1950,18 @@ break; if (*signame == '0' && !signame[1]) sig = 0; +#ifdef ALT_SIGS + if (sig > SIGCOUNT) { + int i; + + for (i = 0; alt_sigs[i].name; i++) + if (!strcmp(alt_sigs[i].name, signame)) + { + sig = alt_sigs[i].num; + break; + } + } +#endif if (sig > SIGCOUNT) { zwarnnam(nam, "unknown signal: SIG%s", signame, 0); zwarnnam(nam, "type kill -l for a List of signals", NULL, 0); @@ -1964,6 +2018,81 @@ return returnval < 126 ? returnval : 1; } +/* Get a signal number from a string */ + +/**/ +mod_export int +getsignum(char *s) +{ + int x, i; + + /* check for a signal specified by number */ + x = atoi(s); + if (idigit(*s) && x >= 0 && x < VSIGCOUNT) + return x; + + /* search for signal by name */ + for (i = 0; i < VSIGCOUNT; i++) + if (!strcmp(s, sigs[i])) + return i; + +#ifdef ALT_SIGS + for (i = 0; alt_sigs[i].name; i++) + { + if (!strcmp(s, alt_sigs[i].name)) + return alt_sigs[i].num; + } +#endif + + /* no matching signal */ + return -1; +} + +/* Get the function node for a trap, taking care about alternative names */ +/**/ +HashNode +gettrapnode(int sig, int ignoredisable) +{ + char fname[20]; + HashNode hn; + HashNode (*getptr)(HashTable ht, char *name); +#ifdef ALT_SIGS + int i; +#endif + if (ignoredisable) + getptr = shfunctab->getnode2; + else + getptr = shfunctab->getnode; + + sprintf(fname, "TRAP%s", sigs[sig]); + if ((hn = getptr(shfunctab, fname))) + return hn; + +#ifdef ALT_SIGS + for (i = 0; alt_sigs[i].name; i++) { + if (alt_sigs[i].num == sig) { + sprintf(fname, "TRAP%s", alt_sigs[i].name); + if ((hn = getptr(shfunctab, fname))) + return hn; + } + } +#endif + + return NULL; +} + +/* Remove a TRAP function under any name for the signal */ + +/**/ +void +removetrapnode(int sig) +{ + HashNode hn = gettrapnode(sig, 1); + if (hn) { + shfunctab->removenode(shfunctab, hn->nam); + shfunctab->freenode(hn); + } +} /* Suspend this shell */ Index: Src/signals.c =================================================================== RCS file: /cvsroot/zsh/zsh/Src/signals.c,v retrieving revision 1.32 diff -u -r1.32 signals.c --- Src/signals.c 8 Oct 2004 14:37:31 -0000 1.32 +++ Src/signals.c 20 Nov 2004 19:12:44 -0000 @@ -697,10 +697,8 @@ * Get the old function: this assumes we haven't added * the new one yet. */ - char func[20]; Shfunc shf, newshf = NULL; - sprintf(func, "TRAP%s", sigs[sig]); - if ((shf = (Shfunc)shfunctab->getnode2(shfunctab, func))) { + if ((shf = (Shfunc)gettrapnode(sig, 1))) { /* Copy the node for saving */ newshf = (Shfunc) zalloc(sizeof(*newshf)); newshf->nam = ztrdup(shf->nam); @@ -837,16 +835,15 @@ * That causes a little inefficiency, but a good deal more reliability. */ if (trapped & ZSIG_FUNC) { - char func[20]; - HashNode node; + HashNode node = gettrapnode(sig, 1); - sprintf(func, "TRAP%s", sigs[sig]); /* * As in dosavetrap(), don't call removeshfuncnode() because * that calls back into unsettrap(); */ sigfuncs[sig] = NULL; - node = removehashnode(shfunctab, func); + if (node) + removehashnode(shfunctab, node->nam); unqueue_signals(); return node; @@ -1010,10 +1007,10 @@ runhookdef(BEFORETRAPHOOK, NULL); if (*sigtr & ZSIG_FUNC) { int osc = sfcontext; + HashNode hn = gettrapnode(sig, 0); args = znewlinklist(); - name = (char *) zalloc(5 + strlen(sigs[sig])); - sprintf(name, "TRAP%s", sigs[sig]); + name = ztrdup(hn->nam); zaddlinknode(args, name); sprintf(num, "%d", sig); zaddlinknode(args, num); Index: Src/utils.c =================================================================== RCS file: /cvsroot/zsh/zsh/Src/utils.c,v retrieving revision 1.69 diff -u -r1.69 utils.c --- Src/utils.c 21 Oct 2004 00:33:42 -0000 1.69 +++ Src/utils.c 20 Nov 2004 19:13:19 -0000 @@ -3969,27 +3969,6 @@ return err; } -/* Get a signal number from a string */ - -/**/ -mod_export int -getsignum(char *s) -{ - int x, i; - - /* check for a signal specified by number */ - x = atoi(s); - if (idigit(*s) && x >= 0 && x < VSIGCOUNT) - return x; - - /* search for signal by name */ - for (i = 0; i < VSIGCOUNT; i++) - if (!strcmp(s, sigs[i])) - return i; - - /* no matching signal */ - return -1; -} /* Check whether the shell is running with privileges in effect. * * This is the case if EITHER the euid is zero, OR (if the system * -- Peter Stephenson <pws@pwstephenson.fsnet.co.uk> Work: pws@csr.com Web: http://www.pwstephenson.fsnet.co.uk ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2004-11-21 7:31 UTC | newest] Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2004-11-18 14:52 SUGGESTION: kill -l could show numbers, too Christian Höltje 2004-11-18 16:05 ` Peter Stephenson 2004-11-18 16:12 ` Dan Nelson 2004-11-18 16:33 ` Bart Schaefer 2004-11-18 16:50 ` Stephane Chazelas 2004-11-18 16:39 ` SUGGESTION: kill -l could show numbers, too (+CLD vs CHLD) Stephane Chazelas 2004-11-18 17:22 ` Peter Stephenson 2004-11-19 9:59 ` Peter Stephenson 2004-11-19 15:34 ` Bart Schaefer 2004-11-19 16:02 ` Peter Stephenson 2004-11-20 19:29 ` Peter Stephenson
Code repositories for project(s) associated with this public inbox https://git.vuxu.org/mirror/zsh/ This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).