diff options
author | Kristaps Dzonsons <kristaps@bsd.lv> | 2011-11-23 09:52:20 +0000 |
---|---|---|
committer | Kristaps Dzonsons <kristaps@bsd.lv> | 2011-11-23 09:52:20 +0000 |
commit | dd7a7a37962f5fd5a134a98280617bb07028d374 (patch) | |
tree | cba643a12cd76d2f79386cf30da35607377922b9 | |
parent | 3dbbcb4102f31efcf3b35550f0856faee10018ba (diff) | |
download | mandoc-dd7a7a37962f5fd5a134a98280617bb07028d374.tar.gz |
Have mandocdb(8) take advantage of manpath.h.
This brings it in line with makewhatis(8), which, like apropos(1), will use
man.conf (or manpath(1)) if no manpath entries are provided.
-rw-r--r-- | mandocdb.8 | 7 | ||||
-rw-r--r-- | mandocdb.c | 30 |
2 files changed, 32 insertions, 5 deletions
@@ -71,6 +71,12 @@ By default, creates databases in each .Ar dir using files rooted in that directory. +If +.Ar dir +is not provided, +.Nm +uses the default paths stipulated by +.Xr man 1 . .Pp If fatal parse errors are encountered while parsing, the offending file is printed to stderr, omitted from the index, and the parse continues @@ -190,6 +196,7 @@ to exit at once, possibly in the middle of parsing or formatting a file. The output databases are corrupt and should be removed . .El .Sh SEE ALSO +.Xr man 1 , .Xr mandoc 1 , .Xr btree 3 , .Xr recno 3 @@ -39,6 +39,7 @@ #include "mdoc.h" #include "mandoc.h" #include "mandocdb.h" +#include "manpath.h" #define MANDOC_BUFSZ BUFSIZ #define MANDOC_SLOP 1024 @@ -247,6 +248,7 @@ int main(int argc, char *argv[]) { struct mparse *mp; /* parse sequence */ + struct manpaths dirs; enum op op; /* current operation */ const char *dir; char ibuf[MAXPATHLEN], /* index fname */ @@ -274,6 +276,8 @@ main(int argc, char *argv[]) else ++progname; + memset(&dirs, 0, sizeof(struct manpaths)); + verb = 0; of = NULL; db = idx = NULL; @@ -370,19 +374,34 @@ main(int argc, char *argv[]) goto out; } - for (i = 0; i < argc; i++) { + /* + * Configure the directories we're going to scan. + * If we have command-line arguments, use them. + * If not, we use man(1)'s method (see mandocdb.8). + */ + + if (argc > 0) { + dirs.paths = mandoc_malloc(argc * sizeof(char *)); + dirs.sz = argc; + for (i = 0; i < argc; i++) + dirs.paths[i] = mandoc_strdup(argv[i]); + } else + manpath_parseconf(&dirs); + + for (i = 0; i < dirs.sz; i++) { ibuf[0] = fbuf[0] = '\0'; - strlcat(fbuf, argv[i], MAXPATHLEN); + strlcat(fbuf, dirs.paths[i], MAXPATHLEN); strlcat(fbuf, "/", MAXPATHLEN); sz1 = strlcat(fbuf, MANDOC_DB, MAXPATHLEN); - strlcat(ibuf, argv[i], MAXPATHLEN); + strlcat(ibuf, dirs.paths[i], MAXPATHLEN); strlcat(ibuf, "/", MAXPATHLEN); sz2 = strlcat(ibuf, MANDOC_IDX, MAXPATHLEN); if (sz1 >= MAXPATHLEN || sz2 >= MAXPATHLEN) { - fprintf(stderr, "%s: Path too long\n", argv[i]); + fprintf(stderr, "%s: Path too long\n", + dirs.paths[i]); exit((int)MANDOCLEVEL_BADARG); } @@ -405,7 +424,7 @@ main(int argc, char *argv[]) ofile_free(of); of = NULL; - if ( ! ofile_dirbuild(argv[i], verb, &of)) + if ( ! ofile_dirbuild(dirs.paths[i], verb, &of)) exit((int)MANDOCLEVEL_SYSERR); if (NULL == of) @@ -427,6 +446,7 @@ out: if (mp) mparse_free(mp); + manpath_free(&dirs); ofile_free(of); free(buf.cp); free(dbuf.cp); |