summaryrefslogtreecommitdiffstats
path: root/cgi.c
diff options
context:
space:
mode:
authorIngo Schwarze <schwarze@openbsd.org>2014-07-09 09:19:03 +0000
committerIngo Schwarze <schwarze@openbsd.org>2014-07-09 09:19:03 +0000
commit4d67d3e6505d789b0262b285697634541204c556 (patch)
tree745bd020f3980cda31643af5a17061c4e408c7dc /cgi.c
parent23a18e51d6be043e909d2538c8c720ccd7780ca8 (diff)
downloadmandoc-4d67d3e6505d789b0262b285697634541204c556.tar.gz
Simplify pathgen() even more.
Let manpath.conf be a plain text list of the directories to use. As a bonus, this makes the order configurable. Get rid of <dirent.h>, opendir(3), readdir(3), stat(2).
Diffstat (limited to 'cgi.c')
-rw-r--r--cgi.c40
1 files changed, 13 insertions, 27 deletions
diff --git a/cgi.c b/cgi.c
index 424b99de..ed0f39cc 100644
--- a/cgi.c
+++ b/cgi.c
@@ -20,7 +20,6 @@
#endif
#include <ctype.h>
-#include <dirent.h>
#include <fcntl.h>
#include <limits.h>
#include <stdio.h>
@@ -77,7 +76,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 *);
@@ -829,7 +828,6 @@ int
main(void)
{
int i;
- DIR *cwd;
struct req req;
char *p, *path, *subpath;
@@ -857,16 +855,10 @@ 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(cwd, &req);
- closedir(cwd);
+ pathgen(&req);
/* Next parse out the query string. */
@@ -938,24 +930,18 @@ 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))) {
+ req->p = mandoc_realloc(req->p,
+ (req->psz + 1) * sizeof(char *));
+ req->p[req->psz++] = mandoc_strndup(dp, dpsz);
}
}