]> git.cameronkatri.com Git - mandoc.git/blobdiff - cgi.c
Choosing the right encoding is a tricky business...
[mandoc.git] / cgi.c
diff --git a/cgi.c b/cgi.c
index cfce83889bca8893c9a032fa3e6fff9ef2daabb5..0ea88ea8cff59a50de9d4309652c4b1abf4b60cd 100644 (file)
--- a/cgi.c
+++ b/cgi.c
@@ -1,4 +1,4 @@
-/*     $Id: cgi.c,v 1.90 2014/07/25 20:09:09 schwarze Exp $ */
+/*     $Id: cgi.c,v 1.91 2014/07/25 21:05:41 schwarze Exp $ */
 /*
  * Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2014 Ingo Schwarze <schwarze@usta.de>
@@ -55,13 +55,12 @@ struct      req {
 static void             catman(const struct req *, const char *);
 static void             format(const struct req *, const char *);
 static void             html_print(const char *);
-static void             html_printquery(const struct req *);
 static void             html_putchar(char);
 static int              http_decode(char *);
 static void             http_parse(struct req *, const char *);
 static void             http_print(const char *);
 static void             http_putchar(char);
-static void             http_printquery(const struct req *);
+static void             http_printquery(const struct req *, const char *);
 static void             pathgen(struct req *);
 static void             pg_error_badrequest(const char *);
 static void             pg_error_internal(void);
@@ -145,7 +144,7 @@ html_putchar(char c)
 }
 
 static void
-http_printquery(const struct req *req)
+http_printquery(const struct req *req, const char *sep)
 {
 
        if (NULL != req->q.query) {
@@ -153,47 +152,22 @@ http_printquery(const struct req *req)
                http_print(req->q.query);
        }
        if (0 == req->q.equal)
-               printf("&apropos=1");
+               printf("%sapropos=1", sep);
        if (NULL != req->q.sec) {
-               printf("&sec=");
+               printf("%ssec=", sep);
                http_print(req->q.sec);
        }
        if (NULL != req->q.arch) {
-               printf("&arch=");
+               printf("%sarch=", sep);
                http_print(req->q.arch);
        }
        if (NULL != req->q.manpath &&
            strcmp(req->q.manpath, req->p[0])) {
-               printf("&manpath=");
+               printf("%smanpath=", sep);
                http_print(req->q.manpath);
        }
 }
 
-static void
-html_printquery(const struct req *req)
-{
-
-       if (NULL != req->q.query) {
-               printf("query=");
-               html_print(req->q.query);
-       }
-       if (0 == req->q.equal)
-               printf("&amp;apropos=1");
-       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.manpath &&
-           strcmp(req->q.manpath, req->p[0])) {
-               printf("&amp;manpath=");
-               html_print(req->q.manpath);
-       }
-}
-
 static void
 http_print(const char *p)
 {
@@ -640,7 +614,7 @@ pg_searchres(const struct req *req, struct manpage *r, size_t sz)
                printf("Status: 303 See Other\r\n");
                printf("Location: http://%s%s/%s/%s?",
                    HTTP_HOST, scriptname, req->q.manpath, r[0].file);
-               http_printquery(req);
+               http_printquery(req, "&");
                printf("\r\n"
                     "Content-Type: text/html; charset=utf-8\r\n"
                     "\r\n");
@@ -657,7 +631,7 @@ pg_searchres(const struct req *req, struct manpage *r, size_t sz)
                       "<TD CLASS=\"title\">\n"
                       "<A HREF=\"%s/%s/%s?", 
                    scriptname, req->q.manpath, r[i].file);
-               html_printquery(req);
+               http_printquery(req, "&amp;");
                printf("\">");
                html_print(r[i].names);
                printf("</A>\n"