summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2017-02-16 10:56:07 +0000
committerIngo Schwarze <schwarze@openbsd.org>2017-02-16 10:56:07 +0000
commit853da03c9620f7701e3a1286e9316ec6b8c23b2f (patch)
tree49ae56edc17e321d0f44aee0b0e95cd7938032cc
parent884a60b25e9e47062115672eba1e8ab234747909 (diff)
downloadmandoc-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.
-rw-r--r--main.c39
1 files changed, 22 insertions, 17 deletions
diff --git a/main.c b/main.c
index 70566436..5a665280 100644
--- a/main.c
+++ b/main.c
@@ -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))