svn commit: r208868 - in head/usr.bin: bc dc
Gabor Kovesdan
gabor at FreeBSD.org
Sun Jun 6 11:36:09 UTC 2010
Author: gabor
Date: Sun Jun 6 11:36:08 2010
New Revision: 208868
URL: http://svn.freebsd.org/changeset/base/208868
Log:
- Fix signal handling in bc/dc. Now Ctrl-C terminates the execution.
Requested by: gk (via private mail)
Approved by: delphij (mentor)
Modified:
head/usr.bin/bc/scan.l
head/usr.bin/dc/bcode.c
Modified: head/usr.bin/bc/scan.l
==============================================================================
--- head/usr.bin/bc/scan.l Sun Jun 6 11:32:38 2010 (r208867)
+++ head/usr.bin/bc/scan.l Sun Jun 6 11:36:08 2010 (r208868)
@@ -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);
Modified: head/usr.bin/dc/bcode.c
==============================================================================
--- head/usr.bin/dc/bcode.c Sun Jun 6 11:32:38 2010 (r208867)
+++ head/usr.bin/dc/bcode.c Sun Jun 6 11:36:08 2010 (r208868)
@@ -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_tabl
(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, "* ",
More information about the svn-src-head
mailing list