]> git.cameronkatri.com Git - mandoc.git/blobdiff - manpage.c
Cope with another one of the many kinds of DocBook stupidity:
[mandoc.git] / manpage.c
index dadf98f1ca732fb2a4239c24eca5e95dd2354aaa..999f3d3247621a76c86d40dd7395a1b41a599d31 100644 (file)
--- a/manpage.c
+++ b/manpage.c
@@ -1,6 +1,7 @@
-/*     $Id: manpage.c,v 1.4 2013/06/05 02:00:26 schwarze Exp $ */
+/*     $Id: manpage.c,v 1.10 2015/02/10 08:05:30 schwarze Exp $ */
 /*
  * Copyright (c) 2012 Kristaps Dzonsons <kristaps@bsd.lv>
+ * Copyright (c) 2013 Ingo Schwarze <schwarze@openbsd.org>
  *
  * Permission to use, copy, modify, and distribute this software for any
  * purpose with or without fee is hereby granted, provided that the above
@@ -14,9 +15,9 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
-#ifdef HAVE_CONFIG_H
 #include "config.h"
-#endif
+
+#include <sys/types.h>
 
 #include <assert.h>
 #include <getopt.h>
@@ -86,7 +87,8 @@ main(int argc, char *argv[])
        if (0 == argc)
                goto usage;
 
-       search.deftype = TYPE_Nm | TYPE_Nd;
+       search.outkey = "Nd";
+       search.argmode = ARG_EXPR;
 
        manpath_parse(&paths, conf_file, defpaths, auxpaths);
        ch = mansearch(&search, &paths, argc, argv, &res, &sz);
@@ -105,12 +107,15 @@ main(int argc, char *argv[])
                return(EXIT_FAILURE);
 
        for (i = 0; i < sz; i++) {
-               printf("%6zu  %s: %s\n", 
-                       i + 1, res[i].file, res[i].desc);
-               free(res[i].desc);
+               printf("%6zu  %s: %s\n",
+                       i + 1, res[i].names, res[i].output);
+               free(res[i].names);
+               free(res[i].output);
        }
 
        if (0 == term) {
+               for (i = 0; i < sz; i++)
+                       free(res[i].file);
                free(res);
                return(EXIT_SUCCESS);
        }
@@ -127,23 +132,27 @@ main(int argc, char *argv[])
                }
 
        if (0 == i) {
+               for (i = 0; i < sz; i++)
+                       free(res[i].file);
                free(res);
                return(EXIT_SUCCESS);
        }
 show:
        cmd = res[i - 1].form ? "mandoc" : "cat";
        strlcpy(buf, res[i - 1].file, PATH_MAX);
+       for (i = 0; i < sz; i++)
+               free(res[i].file);
        free(res);
 
        show(cmd, buf);
        /* NOTREACHED */
 usage:
        fprintf(stderr, "usage: %s [-C conf] "
-                                 "[-M paths] "
+                                 "[-M paths] "
                                  "[-m paths] "
                                  "[-S arch] "
                                  "[-s section] "
-                                 "expr ...\n", 
+                                 "expr ...\n",
                                  progname);
        return(EXIT_FAILURE);
 }
@@ -165,9 +174,9 @@ show(const char *cmd, const char *file)
        } else if (pid > 0) {
                dup2(fds[0], STDIN_FILENO);
                close(fds[1]);
-               cmd = NULL != getenv("MANPAGER") ? 
+               cmd = NULL != getenv("MANPAGER") ?
                        getenv("MANPAGER") :
-                       (NULL != getenv("PAGER") ? 
+                       (NULL != getenv("PAGER") ?
                         getenv("PAGER") : "more");
                execlp(cmd, cmd, (char *)NULL);
                perror(cmd);