summaryrefslogtreecommitdiff
path: root/Src/jobs.c
diff options
context:
space:
mode:
Diffstat (limited to 'Src/jobs.c')
-rw-r--r--Src/jobs.c54
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;
}