summaryrefslogtreecommitdiff
path: root/fn.c
diff options
context:
space:
mode:
authorByron Rakitzis <byron@archone.tamu.edu>1994-03-07 00:00:01 +0000
committerToby Goodwin <toby@paccrat.org>2015-05-16 21:22:09 +0100
commita076248389c82276e079756bee26c011b03f70f2 (patch)
tree9d22c48c75bcd778f30cbb2e37b6dff6abb4f1d2 /fn.c
parent6bb38f6a01dbf4bbd584e038ceace0a00faa27bb (diff)
beta: rc-1.5betadev1
Diffstat (limited to 'fn.c')
-rw-r--r--fn.c33
1 files changed, 12 insertions, 21 deletions
diff --git a/fn.c b/fn.c
index 02de02b..56c5e86 100644
--- a/fn.c
+++ b/fn.c
@@ -12,9 +12,9 @@ static void fn_handler(int), dud_handler(int);
static bool runexit = FALSE;
static Node *handlers[NUMOFSIGNALS], null;
-static void (*def_sigint)(int) = SIG_DFL,
- (*def_sigquit)(int) = SIG_DFL,
- (*def_sigterm)(int) = SIG_DFL;
+static void (*def_sigint)(int) = SIG_DFL;
+static void (*def_sigquit)(int) = SIG_DFL;
+static void (*def_sigterm)(int) = SIG_DFL;
/*
Set signals to default values for rc. This means that interactive
@@ -106,13 +106,12 @@ extern void setsigdefaults(bool sysvbackground) {
/* rc's exit. if runexit is set, run the sigexit function. */
extern void rc_exit(int stat) {
- static char *sigexit[2] = {
- "sigexit",
- NULL
- };
if (runexit) {
+ char *sig[2];
+ sig[0] = "sigexit";
+ sig[1] = NULL;
runexit = FALSE;
- funcall(sigexit);
+ funcall(sig);
stat = getstatus();
}
exit(stat);
@@ -121,22 +120,14 @@ extern void rc_exit(int stat) {
/* The signal handler for all functions. calls walk() */
static void fn_handler(int s) {
- List *dollarzero;
- Estack e;
- Edata star;
+ char *sig[2];
int olderrno;
if (s < 1 || s >= NUMOFSIGNALS)
panic("unknown signal");
olderrno = errno;
- dollarzero = nnew(List);
- dollarzero->w = signals[s].name;
- dollarzero->n = NULL;
- varassign("*", dollarzero, TRUE);
- star.name = "*";
- except(eVarstack, star, &e);
- walk(handlers[s], TRUE);
- varrm("*", TRUE);
- unexcept(); /* eVarstack */
+ sig[0] = signals[s].name;
+ sig[1] = NULL;
+ funcall(sig);
errno = olderrno;
}
@@ -217,7 +208,7 @@ extern char *fnlookup_string(char *name) {
return NULL;
if (look->extdef != NULL)
return look->extdef;
- return look->extdef = fun2str(name, look->def);
+ return look->extdef = mprint("fn_%F={%T}", name, look->def);
}
/*