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__ */