- Fix signal handling in bc/dc. Now Ctrl-C terminates the execution.

Requested by:	gk (via private mail)
Approved by:	delphij (mentor)
This commit is contained in:
Gabor Kovesdan 2010-06-06 11:36:08 +00:00
parent 31dadaf609
commit 85bf7ec797
2 changed files with 5 additions and 36 deletions

View File

@ -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);

View File

@ -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, "* ",