]> git.cameronkatri.com Git - mandoc.git/blobdiff - cgi.c
If messages are shown and output is printed without a pager, display
[mandoc.git] / cgi.c
diff --git a/cgi.c b/cgi.c
index 652a6bb5414d76680ebef4930c0fcdfe556fc770..4762f819d57d356def43264b9c2893ca2853972f 100644 (file)
--- a/cgi.c
+++ b/cgi.c
@@ -1,4 +1,4 @@
-/*     $Id: cgi.c,v 1.163 2018/12/14 01:18:25 schwarze Exp $ */
+/*     $Id: cgi.c,v 1.167 2019/07/10 12:49:20 schwarze Exp $ */
 /*
  * Copyright (c) 2011, 2012 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2014, 2015, 2016, 2017, 2018 Ingo Schwarze <schwarze@usta.de>
@@ -324,7 +324,7 @@ http_encode(const char *p)
        for (; *p != '\0'; p++) {
                if (isalnum((unsigned char)*p) == 0 &&
                    strchr("-._~", *p) == NULL)
-                       printf("%%%02.2X", (unsigned char)*p);
+                       printf("%%%2.2X", (unsigned char)*p);
                else
                        putchar(*p);
        }
@@ -849,7 +849,7 @@ resp_format(const struct req *req, const char *file)
 {
        struct manoutput conf;
        struct mparse   *mp;
-       struct roff_man *man;
+       struct roff_meta *meta;
        void            *vp;
        int              fd;
        int              usepath;
@@ -860,38 +860,25 @@ resp_format(const struct req *req, const char *file)
        }
 
        mchars_alloc();
-       mp = mparse_alloc(MPARSE_SO | MPARSE_UTF8 | MPARSE_LATIN1,
-           MANDOC_OS_OTHER, req->q.manpath);
+       mp = mparse_alloc(MPARSE_SO | MPARSE_UTF8 | MPARSE_LATIN1 |
+           MPARSE_VALIDATE, MANDOC_OS_OTHER, req->q.manpath);
        mparse_readfd(mp, fd, file);
        close(fd);
+       meta = mparse_result(mp);
 
        memset(&conf, 0, sizeof(conf));
        conf.fragment = 1;
        conf.style = mandoc_strdup(CSS_DIR "/mandoc.css");
-       conf.toc = 1;
        usepath = strcmp(req->q.manpath, req->p[0]);
        mandoc_asprintf(&conf.man, "/%s%s%s%s%%N.%%S",
            scriptname, *scriptname == '\0' ? "" : "/",
            usepath ? req->q.manpath : "", usepath ? "/" : "");
 
-       mparse_result(mp, &man, NULL);
-       if (man == NULL) {
-               warnx("fatal mandoc error: %s/%s", req->q.manpath, file);
-               pg_error_internal();
-               mparse_free(mp);
-               mchars_free();
-               return;
-       }
-
        vp = html_alloc(&conf);
-
-       if (man->macroset == MACROSET_MDOC) {
-               mdoc_validate(man);
-               html_mdoc(vp, man);
-       } else {
-               man_validate(man);
-               html_man(vp, man);
-       }
+       if (meta->macroset == MACROSET_MDOC)
+               html_mdoc(vp, meta);
+       else
+               html_man(vp, meta);
 
        html_free(vp);
        mparse_free(mp);
@@ -1190,7 +1177,7 @@ parse_path_info(struct req *req, const char *path)
        }
 
        /* Optional section. */
-       if (strncmp(path, "man", 3) == 0) {
+       if (strncmp(path, "man", 3) == 0 || strncmp(path, "cat", 3) == 0) {
                path += 3;
                end = strchr(path, '/');
                free(req->q.sec);