diff options
author | Ingo Schwarze <schwarze@openbsd.org> | 2017-02-16 10:56:07 +0000 |
---|---|---|
committer | Ingo Schwarze <schwarze@openbsd.org> | 2017-02-16 10:56:07 +0000 |
commit | 853da03c9620f7701e3a1286e9316ec6b8c23b2f (patch) | |
tree | 49ae56edc17e321d0f44aee0b0e95cd7938032cc /main.c | |
parent | 884a60b25e9e47062115672eba1e8ab234747909 (diff) | |
download | mandoc-853da03c9620f7701e3a1286e9316ec6b8c23b2f.tar.gz |
Fix rev. 1.280: -O syntax is different in default apropos(1) output
mode and in other output modes, so do not error out prematurely.
Also sort local variables in main() while here.
Diffstat (limited to 'main.c')
-rw-r--r-- | main.c | 39 |
1 files changed, 22 insertions, 17 deletions
@@ -113,17 +113,14 @@ int main(int argc, char *argv[]) { struct manconf conf; - struct curparse curp; struct mansearch search; + struct curparse curp; struct tag_files *tag_files; - const char *progname; - char *auxpaths; - char *defos; - unsigned char *uc; struct manpage *res, *resp; - char *conf_file, *defpaths; - const char *sec; - const char *thisarg; + const char *progname, *sec, *thisarg; + char *conf_file, *defpaths, *auxpaths; + char *defos, *oarg; + unsigned char *uc; size_t i, sz; int prio, best_prio; enum outmode outmode; @@ -169,6 +166,7 @@ main(int argc, char *argv[]) memset(&search, 0, sizeof(struct mansearch)); search.outkey = "Nd"; + oarg = NULL; if (strcmp(progname, BINM_MAN) == 0) search.argmode = ARG_NAME; @@ -247,15 +245,7 @@ main(int argc, char *argv[]) auxpaths = optarg; break; case 'O': - search.outkey = optarg; - while (optarg != NULL) { - thisarg = optarg; - if (manconf_output(&conf.output, - strsep(&optarg, ","), 0) == 0) - continue; - warnx("-O %s: Bad argument", thisarg); - return (int)MANDOCLEVEL_BADARG; - } + oarg = optarg; break; case 'S': search.arch = optarg; @@ -300,6 +290,21 @@ main(int argc, char *argv[]) } } + if (oarg != NULL) { + if (outmode == OUTMODE_LST) + search.outkey = oarg; + else { + while (oarg != NULL) { + thisarg = oarg; + if (manconf_output(&conf.output, + strsep(&oarg, ","), 0) == 0) + continue; + warnx("-O %s: Bad argument", thisarg); + return (int)MANDOCLEVEL_BADARG; + } + } + } + if (outmode == OUTMODE_FLN || outmode == OUTMODE_LST || !isatty(STDOUT_FILENO)) |