-/* $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>
*
#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;
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) {
auxpaths = optarg;
break;
case ('S'):
- arch = optarg;
+ search.arch = optarg;
break;
case ('s'):
- sec = optarg;
+ search.sec = optarg;
break;
default:
goto usage;
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)
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);
}