diff options
Diffstat (limited to 'Src/jobs.c')
-rw-r--r-- | Src/jobs.c | 54 |
1 files changed, 31 insertions, 23 deletions
diff --git a/Src/jobs.c b/Src/jobs.c index 5c1574acf..f5ade7c2b 100644 --- a/Src/jobs.c +++ b/Src/jobs.c @@ -1819,18 +1819,6 @@ bin_fg(char *name, char **argv, Options ops, int func) 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; @@ -1845,9 +1833,15 @@ const struct { { "IO", SIGIO }, #endif #endif +#if !defined(SIGERR) + /* + * If SIGERR is not defined by the operating system, use it + * as an alias for SIGZERR. + */ + { "ERR", SIGZERR }, +#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 * @@ -1879,7 +1873,6 @@ bin_kill(char *nam, char **argv, UNUSED(Options ops), UNUSED(int func)) for (sig = 1; sig <= SIGCOUNT; sig++) if (!cstrpcmp(sigs + sig, &signame)) break; -#ifdef ALT_SIGS if (sig > SIGCOUNT) { int i; @@ -1890,7 +1883,6 @@ bin_kill(char *nam, char **argv, UNUSED(Options ops), UNUSED(int func)) break; } } -#endif if (sig > SIGCOUNT) { zwarnnam(nam, "unknown signal: SIG%s", signame, 0); @@ -1953,7 +1945,6 @@ bin_kill(char *nam, char **argv, UNUSED(Options ops), UNUSED(int func)) break; if (*signame == '0' && !signame[1]) sig = 0; -#ifdef ALT_SIGS if (sig > SIGCOUNT) { int i; @@ -1964,7 +1955,6 @@ bin_kill(char *nam, char **argv, UNUSED(Options ops), UNUSED(int func)) 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); @@ -2042,18 +2032,40 @@ getsignum(char *s) 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 name for a signal. */ + +/**/ +mod_export const char * +getsigname(int sig) +{ + if (sigtrapped[sig] & ZSIG_ALIAS) + { + int i; + for (i = 0; alt_sigs[i].name; i++) + if (sig == alt_sigs[i].num) + return alt_sigs[i].name; + } + else + return sigs[sig]; + + /* shouldn't reach here */ +#ifdef DEBUG + dputs("Bad alias flag for signal"); +#endif + return ""; +} + + /* Get the function node for a trap, taking care about alternative names */ /**/ HashNode @@ -2062,9 +2074,7 @@ 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 @@ -2074,7 +2084,6 @@ gettrapnode(int sig, int ignoredisable) 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); @@ -2082,7 +2091,6 @@ gettrapnode(int sig, int ignoredisable) return hn; } } -#endif return NULL; } |