Module Name:    src
Committed By:   christos
Date:           Tue Jun 12 19:03:26 UTC 2012

Modified Files:
        src/usr.bin/mail: cmd1.c collect.c sig.c sig.h

Log Message:
make sure that signal handlers are always initialized.


To generate a diff of this commit:
cvs rdiff -u -r1.32 -r1.33 src/usr.bin/mail/cmd1.c
cvs rdiff -u -r1.45 -r1.46 src/usr.bin/mail/collect.c
cvs rdiff -u -r1.2 -r1.3 src/usr.bin/mail/sig.c
cvs rdiff -u -r1.1 -r1.2 src/usr.bin/mail/sig.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.bin/mail/cmd1.c
diff -u src/usr.bin/mail/cmd1.c:1.32 src/usr.bin/mail/cmd1.c:1.33
--- src/usr.bin/mail/cmd1.c:1.32	Sun Apr 29 19:50:22 2012
+++ src/usr.bin/mail/cmd1.c	Tue Jun 12 15:03:26 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: cmd1.c,v 1.32 2012/04/29 23:50:22 christos Exp $	*/
+/*	$NetBSD: cmd1.c,v 1.33 2012/06/12 19:03:26 christos Exp $	*/
 
 /*-
  * Copyright (c) 1980, 1993
@@ -34,7 +34,7 @@
 #if 0
 static char sccsid[] = "@(#)cmd1.c	8.2 (Berkeley) 4/20/95";
 #else
-__RCSID("$NetBSD: cmd1.c,v 1.32 2012/04/29 23:50:22 christos Exp $");
+__RCSID("$NetBSD: cmd1.c,v 1.33 2012/06/12 19:03:26 christos Exp $");
 #endif
 #endif /* not lint */
 
@@ -448,7 +448,7 @@ pipecmd(void *v)
 {
 	char *cmd;
 	FILE *volatile obuf;		/* void longjmp clobbering */
-	sig_t volatile oldsigpipe;	/* XXX - is volatile needed? */
+	sig_t volatile oldsigpipe = sig_current(SIGPIPE);
 
 	cmd = v;
 	if (dot == NULL) {

Index: src/usr.bin/mail/collect.c
diff -u src/usr.bin/mail/collect.c:1.45 src/usr.bin/mail/collect.c:1.46
--- src/usr.bin/mail/collect.c:1.45	Sun Apr 29 19:50:22 2012
+++ src/usr.bin/mail/collect.c	Tue Jun 12 15:03:26 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: collect.c,v 1.45 2012/04/29 23:50:22 christos Exp $	*/
+/*	$NetBSD: collect.c,v 1.46 2012/06/12 19:03:26 christos Exp $	*/
 
 /*
  * Copyright (c) 1980, 1993
@@ -34,7 +34,7 @@
 #if 0
 static char sccsid[] = "@(#)collect.c	8.2 (Berkeley) 4/19/94";
 #else
-__RCSID("$NetBSD: collect.c,v 1.45 2012/04/29 23:50:22 christos Exp $");
+__RCSID("$NetBSD: collect.c,v 1.46 2012/06/12 19:03:26 christos Exp $");
 #endif
 #endif /* not lint */
 
@@ -355,11 +355,11 @@ coll_stop(int signo)
 PUBLIC FILE *
 collect(struct header *hp, int printheaders)
 {
-	volatile sig_t old_sigint;
-	volatile sig_t old_sighup;
-	volatile sig_t old_sigtstp;
-	volatile sig_t old_sigttin;
-	volatile sig_t old_sigttou;
+	sig_t volatile old_sigint = sig_current(SIGINT);
+	sig_t volatile old_sighup = sig_current(SIGHUP);
+	sig_t volatile old_sigtstp = sig_current(SIGTSTP);
+	sig_t volatile old_sigttin = sig_current(SIGTTIN);
+	sig_t volatile old_sigttou = sig_current(SIGTTOU);
 	FILE *fbuf;
 	int lc, cc;
 	int c, fd, t;

Index: src/usr.bin/mail/sig.c
diff -u src/usr.bin/mail/sig.c:1.2 src/usr.bin/mail/sig.c:1.3
--- src/usr.bin/mail/sig.c:1.2	Mon Jan 10 12:14:38 2011
+++ src/usr.bin/mail/sig.c	Tue Jun 12 15:03:26 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: sig.c,v 1.2 2011/01/10 17:14:38 dyoung Exp $	*/
+/*	$NetBSD: sig.c,v 1.3 2012/06/12 19:03:26 christos Exp $	*/
 
 /*
  * Copyright (c) 1980, 1993
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>
 #ifndef lint
-__RCSID("$NetBSD: sig.c,v 1.2 2011/01/10 17:14:38 dyoung Exp $");
+__RCSID("$NetBSD: sig.c,v 1.3 2012/06/12 19:03:26 christos Exp $");
 #endif /* not lint */
 
 #include <assert.h>
@@ -162,6 +162,13 @@ sig_check(void)
 }
 
 PUBLIC sig_t
+sig_current(int signo)
+{
+	assert(signo > 0 && signo < NSIG);
+	return sigarray[signo];
+}
+
+PUBLIC sig_t
 sig_signal(int signo, sig_t handler)
 {
 	sig_t old_handler;

Index: src/usr.bin/mail/sig.h
diff -u src/usr.bin/mail/sig.h:1.1 src/usr.bin/mail/sig.h:1.2
--- src/usr.bin/mail/sig.h:1.1	Fri Apr 10 09:08:25 2009
+++ src/usr.bin/mail/sig.h	Tue Jun 12 15:03:26 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: sig.h,v 1.1 2009/04/10 13:08:25 christos Exp $	*/
+/*	$NetBSD: sig.h,v 1.2 2012/06/12 19:03:26 christos Exp $	*/
 
 /*-
  * Copyright (c) 2006 The NetBSD Foundation, Inc.
@@ -39,6 +39,7 @@ void sig_release(void);		/* XXX: should 
 void sig_check(void);
 void sig_setup(void);
 sig_t sig_signal(int, sig_t);
+sig_t sig_current(int);
 
 #endif /* __SIG_H__ */
 

Reply via email to