=================================================================== RCS file: /cvs/mandoc/catman.c,v retrieving revision 1.1 retrieving revision 1.3 diff -u -p -r1.1 -r1.3 --- mandoc/catman.c 2011/11/26 19:54:13 1.1 +++ mandoc/catman.c 2011/12/04 22:52:50 1.3 @@ -1,4 +1,4 @@ -/* $Id: catman.c,v 1.1 2011/11/26 19:54:13 kristaps Exp $ */ +/* $Id: catman.c,v 1.3 2011/12/04 22:52:50 kristaps Exp $ */ /* * Copyright (c) 2011 Kristaps Dzonsons * @@ -52,8 +52,10 @@ } while (/* CONSTCOND */0) static int indexhtml(char *); +#if 0 static int jobstart(const char *, const char *, pid_t *); static int jobwait(pid_t); +#endif static int manup(const struct manpaths *, const char *); static int mkpath(char *, mode_t, mode_t); static int treecpy(char *, char *); @@ -194,6 +196,7 @@ out: return(rc); } +#if 0 /* * Clean up existing child. * Return 1 if cleaned up fine (or none was started) and 0 otherwise. @@ -252,6 +255,7 @@ jobstart(const char *dst, const char *src, pid_t *pid) exit(EXIT_FAILURE); /* NOTREACHED */ } +#endif /* * Pass over the recno database and re-create HTML pages if they're @@ -261,12 +265,12 @@ jobstart(const char *dst, const char *src, pid_t *pid) static int indexhtml(char *dst) { - DB *db; + DB *idx; DBT key, val; size_t sz; int c, rc; unsigned int fl; - const char *f; + const char *f, *cp; char *d; char fname[MAXPATHLEN]; pid_t pid; @@ -277,25 +281,32 @@ indexhtml(char *dst) xstrlcpy(fname, dst, MAXPATHLEN); xstrlcat(fname, "/mandoc.index", MAXPATHLEN); - db = dbopen(fname, O_RDONLY, 0, DB_RECNO, NULL); - if (NULL == db) { + idx = dbopen(fname, O_RDONLY, 0, DB_RECNO, NULL); + if (NULL == idx) { perror(fname); return(-1); } fl = R_FIRST; - while (0 == (c = (*db->seq)(db, &key, &val, fl))) { + while (0 == (c = (*idx->seq)(idx, &key, &val, fl))) { fl = R_NEXT; - f = (const char *)val.data; + cp = (const char *)val.data; + if (0 == val.size) + continue; + if (NULL == (f = memchr(cp, '\0', val.size))) + break; + if (++f - cp >= (int)val.size) + break; + if (NULL == memchr(f, '\0', val.size - (f - cp))) + break; dst[(int)sz] = '\0'; xstrlcat(dst, "/", MAXPATHLEN); xstrlcat(dst, f, MAXPATHLEN); - xstrlcat(dst, ".html", MAXPATHLEN); if (-1 == (rc = isnewer(dst, f))) { - fprintf(stderr, "%s: Manpage missing\n", f); + fprintf(stderr, "%s: File missing\n", f); break; } else if (0 == rc) continue; @@ -310,18 +321,27 @@ indexhtml(char *dst) } *d = '/'; + + if ( ! filecpy(dst, f)) + break; +#if 0 if ( ! jobstart(dst, f, &pid)) break; +#endif if (verbose) printf("%s\n", dst); } - (*db->close)(db); + (*idx->close)(idx); if (c < 0) perror(fname); + else if (0 == c) + fprintf(stderr, "%s: Corrupt index\n", fname); +#if 0 if ( ! jobwait(pid)) c = -1; +#endif return(1 == c ? 1 : -1); } @@ -425,7 +445,7 @@ manup(const struct manpaths *dirs, const char *dir) return(0); } - xstrlcat(dst, "/man.conf", MAXPATHLEN); + xstrlcat(dst, "/catman.conf", MAXPATHLEN); if (verbose) printf("%s\n", dst);