diff options
author | gabor <gabor@FreeBSD.org> | 2010-06-06 11:36:08 +0000 |
---|---|---|
committer | gabor <gabor@FreeBSD.org> | 2010-06-06 11:36:08 +0000 |
commit | 1a0d1f33835b644df56baa59f295df363e168874 (patch) | |
tree | f8976692f4439333d24defe632c7d5892cfbdc2f | |
parent | 76c8a3922dee033069971e3d1c1f0a54b42fe9b5 (diff) | |
download | FreeBSD-src-1a0d1f33835b644df56baa59f295df363e168874.zip FreeBSD-src-1a0d1f33835b644df56baa59f295df363e168874.tar.gz |
- Fix signal handling in bc/dc. Now Ctrl-C terminates the execution.
Requested by: gk (via private mail)
Approved by: delphij (mentor)
-rw-r--r-- | usr.bin/bc/scan.l | 19 | ||||
-rw-r--r-- | usr.bin/dc/bcode.c | 22 |
2 files changed, 5 insertions, 36 deletions
diff --git a/usr.bin/bc/scan.l b/usr.bin/bc/scan.l index 0de6dc8..1f81893 100644 --- a/usr.bin/bc/scan.l +++ b/usr.bin/bc/scan.l @@ -23,7 +23,6 @@ __FBSDID("$FreeBSD$"); #include <err.h> #include <errno.h> #include <histedit.h> -#include <signal.h> #include <stdbool.h> #include <string.h> #include <unistd.h> @@ -235,22 +234,6 @@ add_str(const char *str) strlcat(strbuf, str, strbuf_sz); } -/* ARGSUSED */ -void -abort_line(int sig) -{ - static const char str[] = "[\n]P\n"; - int save_errno; - - switch (sig) { - default: - save_errno = errno; - YY_FLUSH_BUFFER; /* XXX signal race? */ - write(STDOUT_FILENO, str, sizeof(str) - 1); - errno = save_errno; - } -} - int yywrap(void) { @@ -288,8 +271,6 @@ yywrap(void) } else if (fileindex == sargc) { fileindex++; yyin = stdin; - if (interactive) - signal(SIGINT, abort_line); lineno = 1; filename = "stdin"; return (0); diff --git a/usr.bin/dc/bcode.c b/usr.bin/dc/bcode.c index e80c635..408a948 100644 --- a/usr.bin/dc/bcode.c +++ b/usr.bin/dc/bcode.c @@ -44,7 +44,6 @@ struct bmachine { struct source *readstack; struct stack *reg; struct stack stack; - volatile sig_atomic_t interrupted; u_int scale; u_int obase; u_int ibase; @@ -55,7 +54,7 @@ struct bmachine { }; static struct bmachine bmachine; -static void sighandler(int); +static void got_sigint(int); static __inline int readch(void); static __inline void unreadch(void); @@ -223,14 +222,11 @@ static const struct jump_entry jump_table_data[] = { (sizeof(jump_table_data)/sizeof(jump_table_data[0])) static void -sighandler(int ignored) +got_sigint(int ignored __unused) { - switch (ignored) - { - default: - bmachine.interrupted = true; - } + putchar('\n'); + exit(0); } void @@ -265,7 +261,7 @@ init_bmachine(bool extended_registers) bmachine.obase = bmachine.ibase = 10; BN_init(&zero); bn_check(BN_zero(&zero)); - signal(SIGINT, sighandler); + signal(SIGINT, got_sigint); } /* Reset the things needed before processing a (new) file */ @@ -1746,14 +1742,6 @@ eval(void) bmachine.readsp--; continue; } - if (bmachine.interrupted) { - if (bmachine.readsp > 0) { - src_free(); - bmachine.readsp--; - continue; - } else - bmachine.interrupted = false; - } #ifdef DEBUGGING fprintf(stderr, "# %c\n", ch); stack_print(stderr, &bmachine.stack, "* ", |