From 85bf7ec797fb3549c13b8954683be136ba531f94 Mon Sep 17 00:00:00 2001 From: Gabor Kovesdan Date: Sun, 6 Jun 2010 11:36:08 +0000 Subject: [PATCH] - Fix signal handling in bc/dc. Now Ctrl-C terminates the execution. Requested by: gk (via private mail) Approved by: delphij (mentor) --- usr.bin/bc/scan.l | 19 ------------------- 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 0de6dc84f568..1f818936090d 100644 --- a/usr.bin/bc/scan.l +++ b/usr.bin/bc/scan.l @@ -23,7 +23,6 @@ __FBSDID("$FreeBSD$"); #include #include #include -#include #include #include #include @@ -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 e80c63587a38..408a9488e64f 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, "* ",