-/* $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 <kristaps@bsd.lv>
* Copyright (c) 2010-2012, 2014-2017 Ingo Schwarze <schwarze@openbsd.org>
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 *);
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;
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)
{
assert(cfg->argmode == ARG_NAME);
- *res = NULL;
+ if (res != NULL)
+ *res = NULL;
*ressz = lastsz = 0;
while (argc) {
for (ipath = 0; ipath < paths->sz; ipath++) {
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
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,
file, xr->line, xr->pos + 1, cp);