=================================================================== RCS file: /cvs/mandoc/cgi.c,v retrieving revision 1.53 retrieving revision 1.57 diff -u -p -r1.53 -r1.57 --- mandoc/cgi.c 2014/07/09 08:53:28 1.53 +++ mandoc/cgi.c 2014/07/09 12:09:04 1.57 @@ -1,4 +1,4 @@ -/* $Id: cgi.c,v 1.53 2014/07/09 08:53:28 schwarze Exp $ */ +/* $Id: cgi.c,v 1.57 2014/07/09 12:09:04 schwarze Exp $ */ /* * Copyright (c) 2011, 2012 Kristaps Dzonsons * Copyright (c) 2014 Ingo Schwarze @@ -20,7 +20,6 @@ #endif #include -#include #include #include #include @@ -28,13 +27,6 @@ #include #include -#if defined(__sun) -/* for stat() */ -#include -#include -#include -#endif - #include "mandoc.h" #include "mandoc_aux.h" #include "main.h" @@ -62,7 +54,7 @@ struct query { struct req { struct query q; char **p; /* array of available manroots */ - size_t psz; + size_t psz; /* number of available manroots */ enum page page; }; @@ -77,7 +69,7 @@ static void http_parse(struct req *, char *); static void http_print(const char *); static void http_putchar(char); static void http_printquery(const struct req *); -static void pathgen(DIR *, struct req *); +static void pathgen(struct req *); static void pg_index(const struct req *, char *); static void pg_search(const struct req *, char *); static void pg_show(const struct req *, char *); @@ -130,6 +122,7 @@ html_putchar(char c) break; } } + static void http_printquery(const struct req *req) { @@ -152,7 +145,6 @@ http_printquery(const struct req *req) } } - static void html_printquery(const struct req *req) { @@ -684,7 +676,8 @@ format(const struct req *req, const char *file) return; } - mp = mparse_alloc(MPARSE_SO, MANDOCLEVEL_FATAL, NULL, NULL); + mp = mparse_alloc(MPARSE_SO, MANDOCLEVEL_FATAL, NULL, + req->q.manroot); rc = mparse_readfd(mp, fd, file); close(fd); @@ -829,7 +822,6 @@ int main(void) { int i; - DIR *cwd; struct req req; char *p, *path, *subpath; @@ -857,17 +849,11 @@ main(void) perror(cache); resp_bad(); return(EXIT_FAILURE); - } else if (NULL == (cwd = opendir(cache))) { - perror(cache); - resp_bad(); - return(EXIT_FAILURE); } memset(&req, 0, sizeof(struct req)); + pathgen(&req); - pathgen(cwd, &req); - closedir(cwd); - /* Next parse out the query string. */ if (NULL != (p = getenv("QUERY_STRING"))) @@ -938,24 +924,20 @@ cmp(const void *p1, const void *p2) * Scan for indexable paths. */ static void -pathgen(DIR *dir, struct req *req) +pathgen(struct req *req) { - struct dirent *d; -#if defined(__sun) - struct stat sb; -#endif + FILE *fp; + char *dp; + size_t dpsz; - while (NULL != (d = readdir(dir))) { -#if defined(__sun) - stat(d->d_name, &sb); - if (!(S_IFDIR & sb.st_mode) -#else - if (DT_DIR != d->d_type -#endif - || '.' != d->d_name[0]) { - req->p = mandoc_realloc(req->p, - (req->psz + 1) * sizeof(char *)); - req->p[req->psz++] = mandoc_strdup(d->d_name); - } + if (NULL == (fp = fopen("manpath.conf", "r"))) + return; + + while (NULL != (dp = fgetln(fp, &dpsz))) { + if ('\n' == dp[dpsz - 1]) + dpsz--; + req->p = mandoc_realloc(req->p, + (req->psz + 1) * sizeof(char *)); + req->p[req->psz++] = mandoc_strndup(dp, dpsz); } }