]> git.cameronkatri.com Git - mandoc.git/blobdiff - apropos.c
Stop parsing man(7) input when we found all we were searching for,
[mandoc.git] / apropos.c
index 469bff5e5a19d7e08fa96144417fe7aef439366b..96313bc1133b21ef55979cddf9d29077550d4608 100644 (file)
--- a/apropos.c
+++ b/apropos.c
@@ -1,4 +1,4 @@
-/*     $Id: apropos.c,v 1.31 2012/06/08 10:44:52 kristaps Exp $ */
+/*     $Id: apropos.c,v 1.34 2013/07/05 09:33:02 schwarze Exp $ */
 /*
  * Copyright (c) 2012 Kristaps Dzonsons <kristaps@bsd.lv>
  *
@@ -21,6 +21,7 @@
 
 #include <assert.h>
 #include <getopt.h>
+#include <stdint.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 int
 main(int argc, char *argv[])
 {
-       int              ch;
+       int              ch, whatis;
+       struct mansearch search;
        size_t           i, sz;
        struct manpage  *res;
-       char            *conf_file, *defpaths, *auxpaths,
-                       *arch, *sec;
        struct manpaths  paths;
+       char            *defpaths, *auxpaths;
+       char            *conf_file;
        char            *progname;
        extern char     *optarg;
        extern int       optind;
@@ -48,8 +50,13 @@ main(int argc, char *argv[])
        else
                ++progname;
 
-       auxpaths = defpaths = conf_file = arch = sec = NULL;
+       whatis = (0 == strncmp(progname, "whatis", 6));
+
        memset(&paths, 0, sizeof(struct manpaths));
+       memset(&search, 0, sizeof(struct mansearch));
+
+       auxpaths = defpaths = NULL;
+       conf_file = NULL;
 
        while (-1 != (ch = getopt(argc, argv, "C:M:m:S:s:")))
                switch (ch) {
@@ -63,10 +70,10 @@ main(int argc, char *argv[])
                        auxpaths = optarg;
                        break;
                case ('S'):
-                       arch = optarg;
+                       search.arch = optarg;
                        break;
                case ('s'):
-                       sec = optarg;
+                       search.sec = optarg;
                        break;
                default:
                        goto usage;
@@ -78,8 +85,11 @@ main(int argc, char *argv[])
        if (0 == argc)
                goto usage;
 
+       search.deftype = whatis ? TYPE_Nm : TYPE_Nm | TYPE_Nd;
+       search.flags = whatis ? MANSEARCH_WHATIS : 0;
+
        manpath_parse(&paths, conf_file, defpaths, auxpaths);
-       ch = mansearch(&paths, arch, sec, argc, argv, &res, &sz);
+       ch = mansearch(&search, &paths, argc, argv, &res, &sz);
        manpath_free(&paths);
 
        if (0 == ch)
@@ -93,12 +103,8 @@ main(int argc, char *argv[])
        free(res);
        return(sz ? EXIT_SUCCESS : EXIT_FAILURE);
 usage:
-       fprintf(stderr, "usage: %s [-C conf] "
-                                 "[-M paths] "
-                                 "[-m paths] "
-                                 "[-S arch] "
-                                 "[-s section] "
-                                 "expr ...\n", 
-                                 progname);
+       fprintf(stderr, "usage: %s [-C file] [-M path] [-m path] "
+                       "[-S arch] [-s section]%s ...\n", progname,
+                       whatis ? " name" : "\n               expression");
        return(EXIT_FAILURE);
 }