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