version 1.300, 2017/07/20 15:26:41 |
version 1.304, 2018/04/13 19:55:30 |
|
|
/* $Id$ */ |
/* $Id$ */ |
/* |
/* |
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv> |
* Copyright (c) 2008-2012 Kristaps Dzonsons <kristaps@bsd.lv> |
* Copyright (c) 2010-2012, 2014-2017 Ingo Schwarze <schwarze@openbsd.org> |
* Copyright (c) 2010-2012, 2014-2018 Ingo Schwarze <schwarze@openbsd.org> |
* Copyright (c) 2010 Joerg Sonnenberger <joerg@netbsd.org> |
* Copyright (c) 2010 Joerg Sonnenberger <joerg@netbsd.org> |
* |
* |
* Permission to use, copy, modify, and distribute this software for any |
* Permission to use, copy, modify, and distribute this software for any |
|
|
#include "config.h" |
#include "config.h" |
|
|
#include <sys/types.h> |
#include <sys/types.h> |
|
#include <sys/ioctl.h> |
#include <sys/param.h> /* MACHINE */ |
#include <sys/param.h> /* MACHINE */ |
|
#include <sys/termios.h> |
#include <sys/wait.h> |
#include <sys/wait.h> |
|
|
#include <assert.h> |
#include <assert.h> |
Line 120 main(int argc, char *argv[]) |
|
Line 122 main(int argc, char *argv[]) |
|
struct manconf conf; |
struct manconf conf; |
struct mansearch search; |
struct mansearch search; |
struct curparse curp; |
struct curparse curp; |
|
struct winsize ws; |
struct tag_files *tag_files; |
struct tag_files *tag_files; |
struct manpage *res, *resp; |
struct manpage *res, *resp; |
const char *progname, *sec, *thisarg; |
const char *progname, *sec, *thisarg; |
Line 316 main(int argc, char *argv[]) |
|
Line 319 main(int argc, char *argv[]) |
|
!isatty(STDOUT_FILENO)) |
!isatty(STDOUT_FILENO)) |
use_pager = 0; |
use_pager = 0; |
|
|
|
if (use_pager && |
|
(conf.output.width == 0 || conf.output.indent == 0) && |
|
ioctl(STDOUT_FILENO, TIOCGWINSZ, &ws) != -1) { |
|
if (conf.output.width == 0 && ws.ws_col < 79) |
|
conf.output.width = ws.ws_col - 1; |
|
if (conf.output.indent == 0 && ws.ws_col < 66) |
|
conf.output.indent = 3; |
|
} |
|
|
#if HAVE_PLEDGE |
#if HAVE_PLEDGE |
if (!use_pager) |
if (!use_pager) |
if (pledge("stdio rpath", NULL) == -1) |
if (pledge("stdio rpath", NULL) == -1) |
Line 478 main(int argc, char *argv[]) |
|
Line 490 main(int argc, char *argv[]) |
|
parse(&curp, fd, *argv); |
parse(&curp, fd, *argv); |
else if (resp->form == FORM_SRC) { |
else if (resp->form == FORM_SRC) { |
/* For .so only; ignore failure. */ |
/* For .so only; ignore failure. */ |
chdir(conf.manpath.paths[resp->ipath]); |
(void)chdir(conf.manpath.paths[resp->ipath]); |
parse(&curp, fd, resp->file); |
parse(&curp, fd, resp->file); |
} else |
} else |
passthrough(resp->file, fd, |
passthrough(resp->file, fd, |
conf.output.synopsisonly); |
conf.output.synopsisonly); |
|
|
|
if (ferror(stdout)) { |
|
if (tag_files != NULL) { |
|
warn("%s", tag_files->ofn); |
|
tag_unlink(); |
|
tag_files = NULL; |
|
} else |
|
warn("stdout"); |
|
rc = MANDOCLEVEL_SYSERR; |
|
break; |
|
} |
|
|
if (argc > 1 && curp.outtype <= OUTT_UTF8) { |
if (argc > 1 && curp.outtype <= OUTT_UTF8) { |
if (curp.outdata == NULL) |
if (curp.outdata == NULL) |
outdata_alloc(&curp); |
outdata_alloc(&curp); |
Line 1173 spawn_pager(struct tag_files *tag_files) |
|
Line 1196 spawn_pager(struct tag_files *tag_files) |
|
if (dup2(tag_files->ofd, STDOUT_FILENO) == -1) |
if (dup2(tag_files->ofd, STDOUT_FILENO) == -1) |
err((int)MANDOCLEVEL_SYSERR, "pager stdout"); |
err((int)MANDOCLEVEL_SYSERR, "pager stdout"); |
close(tag_files->ofd); |
close(tag_files->ofd); |
close(tag_files->tfd); |
assert(tag_files->tfd == -1); |
|
|
/* Do not start the pager before controlling the terminal. */ |
/* Do not start the pager before controlling the terminal. */ |
|
|