]> git.cameronkatri.com Git - mandoc.git/blobdiff - cgi.c
set a reasonable default for .Os
[mandoc.git] / cgi.c
diff --git a/cgi.c b/cgi.c
index 3bf4c9fdab5e40690ca35c97409a79cdabe8f840..6c82cd939b3d831253ad5633e63612117b6b8859 100644 (file)
--- a/cgi.c
+++ b/cgi.c
@@ -1,4 +1,4 @@
-/*     $Id: cgi.c,v 1.52 2014/07/09 07:30:47 schwarze Exp $ */
+/*     $Id: cgi.c,v 1.56 2014/07/09 11:34:46 schwarze Exp $ */
 /*
  * Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2014 Ingo Schwarze <schwarze@usta.de>
@@ -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 *);
@@ -134,12 +133,22 @@ static void
 http_printquery(const struct req *req)
 {
 
-       printf("&expr=");
-       http_print(req->q.expr ? req->q.expr : "");
-       printf("&sec=");
-       http_print(req->q.sec ? req->q.sec : "");
-       printf("&arch=");
-       http_print(req->q.arch ? req->q.arch : "");
+       if (NULL != req->q.manroot) {
+               printf("&manpath=");
+               http_print(req->q.manroot);
+       }
+       if (NULL != req->q.sec) {
+               printf("&sec=");
+               http_print(req->q.sec);
+       }
+       if (NULL != req->q.arch) {
+               printf("&arch=");
+               http_print(req->q.arch);
+       }
+       if (NULL != req->q.expr) {
+               printf("&expr=");
+               http_print(req->q.expr ? req->q.expr : "");
+       }
 }
 
 
@@ -147,12 +156,22 @@ static void
 html_printquery(const struct req *req)
 {
 
-       printf("&amp;expr=");
-       html_print(req->q.expr ? req->q.expr : "");
-       printf("&amp;sec=");
-       html_print(req->q.sec ? req->q.sec : "");
-       printf("&amp;arch=");
-       html_print(req->q.arch ? req->q.arch : "");
+       if (NULL != req->q.manroot) {
+               printf("&amp;manpath=");
+               html_print(req->q.manroot);
+       }
+       if (NULL != req->q.sec) {
+               printf("&amp;sec=");
+               html_print(req->q.sec);
+       }
+       if (NULL != req->q.arch) {
+               printf("&amp;arch=");
+               html_print(req->q.arch);
+       }
+       if (NULL != req->q.expr) {
+               printf("&amp;expr=");
+               html_print(req->q.expr ? req->q.expr : "");
+       }
 }
 
 static void
@@ -664,7 +683,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);
 
@@ -809,7 +829,6 @@ int
 main(void)
 {
        int              i;
-       DIR             *cwd;
        struct req       req;
        char            *p, *path, *subpath;
 
@@ -837,16 +856,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. */
 
@@ -918,24 +931,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);
        }
 }