diff options
author | 2017-01-09 17:49:55 +0000 | |
---|---|---|
committer | 2017-01-09 17:49:55 +0000 | |
commit | bbdc533616c2f3ac000d3a74ca46ce1bd49a6a47 (patch) | |
tree | ff425c0aeb920974c060397f9e01737edc1b9aec | |
parent | Stop and restart the watchdog timer when entering and leaving ddb(4). (diff) | |
download | wireguard-openbsd-bbdc533616c2f3ac000d3a74ca46ce1bd49a6a47.tar.xz wireguard-openbsd-bbdc533616c2f3ac000d3a74ca46ce1bd49a6a47.zip |
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@.
-rw-r--r-- | usr.bin/mandoc/main.c | 12 | ||||
-rw-r--r-- | usr.bin/mandoc/tag.c | 6 |
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); |