diff options
author | Ingo Schwarze <schwarze@openbsd.org> | 2017-01-09 17:49:57 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@openbsd.org> | 2017-01-09 17:49:57 +0000 |
commit | 6a8c332380e498f7df739486f006b1a0d4bb4623 (patch) | |
tree | d05776ef0423f7627ed23a1238521d99d4d742fa /main.c | |
parent | 53f41c5f2c82d63b4314e0540783fea0cb793f52 (diff) | |
download | mandoc-6a8c332380e498f7df739486f006b1a0d4bb4623.tar.gz |
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 'main.c')
-rw-r--r-- | main.c | 10 |
1 files changed, 5 insertions, 5 deletions
@@ -531,10 +531,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; @@ -547,7 +547,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); @@ -1076,7 +1076,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 HAVE_PLEDGE if (pledge("stdio rpath tmppath tty proc", NULL) == -1) err((int)MANDOCLEVEL_SYSERR, "pledge"); @@ -1094,7 +1094,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); |