=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/mandoc/main.c,v retrieving revision 1.197 retrieving revision 1.198 diff -u -r1.197 -r1.198 --- src/usr.bin/mandoc/main.c 2017/07/01 09:47:23 1.197 +++ src/usr.bin/mandoc/main.c 2017/07/01 12:00:12 1.198 @@ -1,4 +1,4 @@ -/* $OpenBSD: main.c,v 1.197 2017/07/01 09:47:23 schwarze Exp $ */ +/* $OpenBSD: main.c,v 1.198 2017/07/01 12:00:12 schwarze Exp $ */ /* * Copyright (c) 2008-2012 Kristaps Dzonsons * Copyright (c) 2010-2012, 2014-2017 Ingo Schwarze @@ -86,7 +86,7 @@ size_t ipath, const char *, const char *, const char *, struct manpage **, size_t *); -static void fs_search(const struct mansearch *, +static int fs_search(const struct mansearch *, const struct manpaths *, int, char**, struct manpage **, size_t *); static int koptions(int *, char *); @@ -639,6 +639,8 @@ found: warnx("outdated mandoc.db lacks %s(%s) entry, run makewhatis %s", name, sec, paths->paths[ipath]); + if (res == NULL) + return 1; *res = mandoc_reallocarray(*res, ++*ressz, sizeof(struct manpage)); page = *res + (*ressz - 1); page->file = file; @@ -651,7 +653,7 @@ return 1; } -static void +static int fs_search(const struct mansearch *cfg, const struct manpaths *paths, int argc, char **argv, struct manpage **res, size_t *ressz) { @@ -663,7 +665,8 @@ assert(cfg->argmode == ARG_NAME); - *res = NULL; + if (res != NULL) + *res = NULL; *ressz = lastsz = 0; while (argc) { for (ipath = 0; ipath < paths->sz; ipath++) { @@ -671,19 +674,20 @@ if (fs_lookup(paths, ipath, cfg->sec, cfg->arch, *argv, res, ressz) && cfg->firstmatch) - return; + return 1; } else for (isec = 0; isec < nsec; isec++) if (fs_lookup(paths, ipath, sections[isec], cfg->arch, *argv, res, ressz) && cfg->firstmatch) - return; + return 1; } - if (*ressz == lastsz) + if (res != NULL && *ressz == lastsz) warnx("No entry for %s in the manual.", *argv); lastsz = *ressz; argv++; argc--; } + return 0; } static void @@ -796,6 +800,8 @@ search.argmode = ARG_NAME; search.firstmatch = 1; if (mansearch(&search, &paths, 1, &xr->name, NULL, &sz)) + continue; + if (fs_search(&search, &paths, 1, &xr->name, NULL, &sz)) continue; mandoc_asprintf(&cp, "Xr %s %s", xr->name, xr->sec); mmsg(MANDOCERR_XR_BAD, MANDOCLEVEL_STYLE,