=================================================================== RCS file: /cvs/mandoc/catman.c,v retrieving revision 1.6 retrieving revision 1.10 diff -u -p -r1.6 -r1.10 --- mandoc/catman.c 2011/12/16 08:04:34 1.6 +++ mandoc/catman.c 2012/01/03 15:17:20 1.10 @@ -1,4 +1,4 @@ -/* $Id: catman.c,v 1.6 2011/12/16 08:04:34 kristaps Exp $ */ +/* $Id: catman.c,v 1.10 2012/01/03 15:17:20 kristaps Exp $ */ /* * Copyright (c) 2011 Kristaps Dzonsons * @@ -38,6 +38,7 @@ #endif #include "manpath.h" +#include "mandocdb.h" #define xstrlcpy(_dst, _src, _sz) \ do if (strlcpy((_dst), (_src), (_sz)) >= (_sz)) { \ @@ -66,7 +67,7 @@ int main(int argc, char *argv[]) { int ch; - char *aux, *base; + char *aux, *base, *conf_file; struct manpaths dirs; char buf[MAXPATHLEN]; extern char *optarg; @@ -78,11 +79,14 @@ main(int argc, char *argv[]) else ++progname; - aux = base = NULL; + aux = base = conf_file = NULL; xstrlcpy(buf, "/var/www/cache/man.cgi", MAXPATHLEN); - while (-1 != (ch = getopt(argc, argv, "fm:M:o:v"))) + while (-1 != (ch = getopt(argc, argv, "C:fm:M:o:v"))) switch (ch) { + case ('C'): + conf_file = optarg; + break; case ('f'): force = 1; break; @@ -112,7 +116,7 @@ main(int argc, char *argv[]) } memset(&dirs, 0, sizeof(struct manpaths)); - manpath_parse(&dirs, NULL, base, aux); + manpath_parse(&dirs, conf_file, base, aux); ch = manup(&dirs, buf); manpath_free(&dirs); return(ch ? EXIT_SUCCESS : EXIT_FAILURE); @@ -124,6 +128,7 @@ usage(void) fprintf(stderr, "usage: %s " "[-fv] " + "[-C file] " "[-o path] " "[-m manpath] " "[-M manpath]\n", @@ -204,7 +209,7 @@ indexhtml(char *src, size_t ssz, char *dst, size_t dsz DBT key, val; int c, rc; unsigned int fl; - const char *f, *cp; + const char *f; char *d; char fname[MAXPATHLEN]; pid_t pid; @@ -212,7 +217,8 @@ indexhtml(char *src, size_t ssz, char *dst, size_t dsz pid = -1; xstrlcpy(fname, dst, MAXPATHLEN); - xstrlcat(fname, "/mandoc.index", MAXPATHLEN); + xstrlcat(fname, "/", MAXPATHLEN); + xstrlcat(fname, MANDOC_IDX, MAXPATHLEN); idx = dbopen(fname, O_RDONLY, 0, DB_RECNO, NULL); if (NULL == idx) { @@ -223,15 +229,16 @@ indexhtml(char *src, size_t ssz, char *dst, size_t dsz fl = R_FIRST; while (0 == (c = (*idx->seq)(idx, &key, &val, fl))) { fl = R_NEXT; - cp = (const char *)val.data; + /* + * If the record is zero-length, then it's unassigned. + * Skip past these. + */ if (0 == val.size) continue; - if (NULL == (f = memchr(cp, '\0', val.size))) + + f = (const char *)val.data + 1; + if (NULL == memchr(f, '\0', val.size - 1)) break; - if (++f - cp >= (int)val.size) - break; - if (NULL == memchr(f, '\0', val.size - (f - cp))) - break; src[(int)ssz] = dst[(int)dsz] = '\0'; @@ -287,9 +294,12 @@ update(char *dst, char *src) dsz = strlen(dst); ssz = strlen(src); - xstrlcat(src, "/mandoc.db", MAXPATHLEN); - xstrlcat(dst, "/mandoc.db", MAXPATHLEN); + xstrlcat(src, "/", MAXPATHLEN); + xstrlcat(dst, "/", MAXPATHLEN); + xstrlcat(src, MANDOC_DB, MAXPATHLEN); + xstrlcat(dst, MANDOC_DB, MAXPATHLEN); + if ( ! filecpy(dst, src)) return(-1); if (verbose) @@ -297,9 +307,12 @@ update(char *dst, char *src) dst[(int)dsz] = src[(int)ssz] = '\0'; - xstrlcat(src, "/mandoc.index", MAXPATHLEN); - xstrlcat(dst, "/mandoc.index", MAXPATHLEN); + xstrlcat(src, "/", MAXPATHLEN); + xstrlcat(dst, "/", MAXPATHLEN); + xstrlcat(src, MANDOC_IDX, MAXPATHLEN); + xstrlcat(dst, MANDOC_IDX, MAXPATHLEN); + if ( ! filecpy(dst, src)) return(-1); if (verbose) @@ -325,9 +338,12 @@ treecpy(char *dst, char *src) dsz = strlen(dst); ssz = strlen(src); - xstrlcat(src, "/mandoc.index", MAXPATHLEN); - xstrlcat(dst, "/mandoc.index", MAXPATHLEN); + xstrlcat(src, "/", MAXPATHLEN); + xstrlcat(dst, "/", MAXPATHLEN); + xstrlcat(src, MANDOC_IDX, MAXPATHLEN); + xstrlcat(dst, MANDOC_IDX, MAXPATHLEN); + if (-1 == (rc = isnewer(dst, src))) return(0); @@ -336,8 +352,11 @@ treecpy(char *dst, char *src) if (1 == rc) return(update(dst, src)); - xstrlcat(src, "/mandoc.db", MAXPATHLEN); - xstrlcat(dst, "/mandoc.db", MAXPATHLEN); + xstrlcat(src, "/", MAXPATHLEN); + xstrlcat(dst, "/", MAXPATHLEN); + + xstrlcat(src, MANDOC_DB, MAXPATHLEN); + xstrlcat(dst, MANDOC_DB, MAXPATHLEN); if (-1 == (rc = isnewer(dst, src))) return(0);