aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2016-07-08 20:42:15 +0000
committerIngo Schwarze <schwarze@openbsd.org>2016-07-08 20:42:15 +0000
commit6f7d8b6fb13f0fd589d1b4debf505acb5feefac2 (patch)
tree12083d194a7734a76eb0eac40cdd258c0f1da34f
parentf46742430b744a82d0273cd88c0fe5fd92599265 (diff)
downloadmandoc-6f7d8b6fb13f0fd589d1b4debf505acb5feefac2.tar.gz
mandoc-6f7d8b6fb13f0fd589d1b4debf505acb5feefac2.tar.zst
mandoc-6f7d8b6fb13f0fd589d1b4debf505acb5feefac2.zip
POSIX requires that a process calling tcsetpgrp(3) from the background
gets a SIGTTOU signal. In that case, do not stop. Portability issue found while testing on commercial Solaris 9/10/11. Thanks to opencsw.org for providing me with a testing environment.
-rw-r--r--tag.c26
1 files changed, 19 insertions, 7 deletions
diff --git a/tag.c b/tag.c
index 57925ceb..baedf15a 100644
--- a/tag.c
+++ b/tag.c
@@ -1,4 +1,4 @@
-/* $Id: tag.c,v 1.11 2015/11/20 21:59:54 schwarze Exp $ */
+/* $Id: tag.c,v 1.12 2016/07/08 20:42:15 schwarze Exp $ */
/*
* Copyright (c) 2015 Ingo Schwarze <schwarze@openbsd.org>
*
@@ -57,6 +57,24 @@ tag_init(void)
tag_files.tfd = -1;
tag_files.tcpgid = -1;
+ /* Clean up when dying from a signal. */
+
+ memset(&sa, 0, sizeof(sa));
+ sigfillset(&sa.sa_mask);
+ sa.sa_handler = tag_signal;
+ sigaction(SIGHUP, &sa, NULL);
+ sigaction(SIGINT, &sa, NULL);
+ sigaction(SIGTERM, &sa, NULL);
+
+ /*
+ * POSIX requires that a process calling tcsetpgrp(3)
+ * from the background gets a SIGTTOU signal.
+ * In that case, do not stop.
+ */
+
+ sa.sa_handler = SIG_IGN;
+ sigaction(SIGTTOU, &sa, NULL);
+
/* Save the original standard output for use by the pager. */
if ((tag_files.ofd = dup(STDOUT_FILENO)) == -1)
@@ -68,12 +86,6 @@ tag_init(void)
sizeof(tag_files.ofn));
(void)strlcpy(tag_files.tfn, "/tmp/man.XXXXXXXXXX",
sizeof(tag_files.tfn));
- memset(&sa, 0, sizeof(sa));
- sigfillset(&sa.sa_mask);
- sa.sa_handler = tag_signal;
- sigaction(SIGHUP, &sa, NULL);
- sigaction(SIGINT, &sa, NULL);
- sigaction(SIGTERM, &sa, NULL);
if ((ofd = mkstemp(tag_files.ofn)) == -1)
goto fail;
if ((tag_files.tfd = mkstemp(tag_files.tfn)) == -1)