summaryrefslogtreecommitdiff
path: root/usr.bin
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@cvs.openbsd.org>2017-01-09 17:49:56 +0000
committerIngo Schwarze <schwarze@cvs.openbsd.org>2017-01-09 17:49:56 +0000
commitcf421c1283bfb851ecceef84ef3af547f8b965df (patch)
tree66d2912ed7e753a36c653ec98fa871dcb39ab8e1 /usr.bin
parent4e234dcf2cb86486c5533c81c9846f6c5770f981 (diff)
Use stdout rather than stdin for controlling the terminal
such that "cat foo.mdoc | man -l" works. Issue reported by Christian Neukirchen <chneukirchen at gmail dot com> and also tested by him on Void Linux with both glibc and musl. The patch makes sense to millert@.
Diffstat (limited to 'usr.bin')
-rw-r--r--usr.bin/mandoc/main.c12
-rw-r--r--usr.bin/mandoc/tag.c6
2 files changed, 9 insertions, 9 deletions
diff --git a/usr.bin/mandoc/main.c b/usr.bin/mandoc/main.c
index b030631f6bb..a5eacd713e9 100644
--- a/usr.bin/mandoc/main.c
+++ b/usr.bin/mandoc/main.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: main.c,v 1.181 2017/01/09 01:36:22 schwarze Exp $ */
+/* $OpenBSD: main.c,v 1.182 2017/01/09 17:49:55 schwarze Exp $ */
/*
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv>
* Copyright (c) 2010-2012, 2014-2017 Ingo Schwarze <schwarze@openbsd.org>
@@ -501,10 +501,10 @@ out:
/* Stop here until moved to the foreground. */
- tc_pgid = tcgetpgrp(STDIN_FILENO);
+ tc_pgid = tcgetpgrp(tag_files->ofd);
if (tc_pgid != man_pgid) {
if (tc_pgid == pager_pid) {
- (void)tcsetpgrp(STDIN_FILENO,
+ (void)tcsetpgrp(tag_files->ofd,
man_pgid);
if (signum == SIGTTIN)
continue;
@@ -517,7 +517,7 @@ out:
/* Once in the foreground, activate the pager. */
if (pager_pid) {
- (void)tcsetpgrp(STDIN_FILENO, pager_pid);
+ (void)tcsetpgrp(tag_files->ofd, pager_pid);
kill(pager_pid, SIGCONT);
} else
pager_pid = spawn_pager(tag_files);
@@ -1046,7 +1046,7 @@ spawn_pager(struct tag_files *tag_files)
break;
default:
(void)setpgid(pager_pid, 0);
- (void)tcsetpgrp(STDIN_FILENO, pager_pid);
+ (void)tcsetpgrp(tag_files->ofd, pager_pid);
if (pledge("stdio rpath tmppath tty proc", NULL) == -1)
err((int)MANDOCLEVEL_SYSERR, "pledge");
tag_files->pager_pid = pager_pid;
@@ -1062,7 +1062,7 @@ spawn_pager(struct tag_files *tag_files)
/* Do not start the pager before controlling the terminal. */
- while (tcgetpgrp(STDIN_FILENO) != getpid())
+ while (tcgetpgrp(STDOUT_FILENO) != getpid())
nanosleep(&timeout, NULL);
execvp(argv[0], argv);
diff --git a/usr.bin/mandoc/tag.c b/usr.bin/mandoc/tag.c
index 0a30d7d70b4..bcf072fc82e 100644
--- a/usr.bin/mandoc/tag.c
+++ b/usr.bin/mandoc/tag.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: tag.c,v 1.16 2016/11/08 16:23:37 schwarze Exp $ */
+/* $OpenBSD: tag.c,v 1.17 2017/01/09 17:49:55 schwarze Exp $ */
/*
* Copyright (c) 2015, 2016 Ingo Schwarze <schwarze@openbsd.org>
*
@@ -219,11 +219,11 @@ tag_unlink(void)
pid_t tc_pgid;
if (tag_files.tcpgid != -1) {
- tc_pgid = tcgetpgrp(STDIN_FILENO);
+ tc_pgid = tcgetpgrp(tag_files.ofd);
if (tc_pgid == tag_files.pager_pid ||
tc_pgid == getpgid(0) ||
getpgid(tc_pgid) == -1)
- (void)tcsetpgrp(STDIN_FILENO, tag_files.tcpgid);
+ (void)tcsetpgrp(tag_files.ofd, tag_files.tcpgid);
}
if (*tag_files.ofn != '\0')
unlink(tag_files.ofn);