summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKristaps Dzonsons <kristaps@bsd.lv>2011-11-29 10:53:42 +0000
committerKristaps Dzonsons <kristaps@bsd.lv>2011-11-29 10:53:42 +0000
commit34df86dc46608f2598c87e854a8b4fb6369129d9 (patch)
tree2134dd9a04b71e7dce49ed05769f493a210fa463
parentba260b631b89ba11f9cb1397e777e91f3bb3438d (diff)
downloadmandoc-34df86dc46608f2598c87e854a8b4fb6369129d9.tar.gz
Make `-i' only apply to regular expressions. For the equality operator
(and thus the default), always use strcasestr(). Discussed on tech@ with schwarze@. While here, fix the apropos.c usage() message to be consistent with apropos(1) and clean up the EXAMPLES in apropos(1).
-rw-r--r--apropos.138
-rw-r--r--apropos.c4
-rw-r--r--apropos_db.c13
3 files changed, 20 insertions, 35 deletions
diff --git a/apropos.1 b/apropos.1
index e393d6c7..17297c2a 100644
--- a/apropos.1
+++ b/apropos.1
@@ -112,11 +112,11 @@ evaluates a substring, while
.Li \&~
evaluates a regular expression.
.It Fl i Ar term
-Same as
-.Ar term ,
-but
+If
.Ar term
+is a regular expression, it
is evaluated case-insensitively.
+Has no effect on substring terms.
.El
.Pp
By default,
@@ -125,7 +125,7 @@ searches for
.Xr mandocdb 8
databases in the default paths stipulated by
.Xr man 1 ,
-parses terms as case-insensitive regular expressions
+parses terms as case-sensitive regular expressions
.Pq the Li \&~ operator
over manual names and descriptions
.Pq the Li \&Nm No and Li \&Nd No macro keys .
@@ -238,25 +238,25 @@ Invalid paths, or paths without manual databases, are ignored.
Overridden by
.Fl M .
.El
-.\" .Sh FILES
.Sh EXIT STATUS
.Ex -std
.Sh EXAMPLES
Search for
.Qq mdoc
-within the manual name and description:
+as a substring and regular expression
+within each manual name and description:
.Pp
.Dl $ apropos mdoc
+.Dl $ apropos ~^mdoc$
.Pp
-Two variants of searching for
-.Qq mdoc ,
-.Qq roff ,
-or
+Include matches for
+.Qq roff
+and
.Qq man
-within manual names and descriptions:
+for the regular expression case:
.Pp
-.Dl $ apropos mdoc roff man
-.Dl $ apropos mdoc \-o roff \-o man
+.Dl $ apropos ~^mdoc$ roff man
+.Dl $ apropos ~^mdoc$ \-o roff \-o man
.Pp
Search for
.Qq optind
@@ -264,17 +264,11 @@ and
.Qq optarg
as variable names in the library category:
.Pp
-.Dl $ apropos \-s 3 \(dqVa~^optind$\(dq -a \(dqVa~^optarg$\(dq
-.Pp
-Search for all manuals referencing
-.Qq POSIX
-in any letter case:
-.Pp
-.Dl $ apropos \-\- \-i posix
+.Dl $ apropos \-s 3 Va~^optind \-a Va~^optarg$
.Sh SEE ALSO
.Xr man 1 ,
-.Xr mandoc 1 ,
-.Xr re_format 7
+.Xr re_format 7 ,
+.Xr mandocdb 8
.Sh AUTHORS
The
.Nm
diff --git a/apropos.c b/apropos.c
index 0d97c82a..939fbce0 100644
--- a/apropos.c
+++ b/apropos.c
@@ -142,8 +142,8 @@ usage(void)
{
fprintf(stderr, "usage: %s "
- "[-M path] "
- "[-m path] "
+ "[-M manpath] "
+ "[-m manpath] "
"[-S arch] "
"[-s section] "
"expression...\n",
diff --git a/apropos_db.c b/apropos_db.c
index f1adf29c..3e8c71a2 100644
--- a/apropos_db.c
+++ b/apropos_db.c
@@ -52,7 +52,6 @@ struct expr {
int regex; /* is regex? */
int index; /* index in match array */
uint64_t mask; /* type-mask */
- int cs; /* is case-sensitive? */
int and; /* is rhs of logical AND? */
char *v; /* search value */
regex_t re; /* compiled re, if regex */
@@ -694,7 +693,6 @@ exprexpr(int argc, char *argv[], int *pos, int *lvl, size_t *tt)
++(*pos);
++(*lvl);
next = mandoc_calloc(1, sizeof(struct expr));
- next->cs = 1;
next->subexpr = exprexpr(argc, argv, pos, lvl, tt);
if (NULL == next->subexpr) {
free(next);
@@ -745,8 +743,6 @@ exprterm(char *buf, int cs)
memset(&e, 0, sizeof(struct expr));
- e.cs = cs;
-
/* Choose regex or substring match. */
if (NULL == (e.v = strpbrk(buf, "=~"))) {
@@ -818,13 +814,8 @@ exprmark(const struct expr *p, const char *cp,
if (p->regex) {
if (regexec(&p->re, cp, 0, NULL, 0))
continue;
- } else if (p->cs) {
- if (NULL == strstr(cp, p->v))
- continue;
- } else {
- if (NULL == strcasestr(cp, p->v))
- continue;
- }
+ } else if (NULL == strcasestr(cp, p->v))
+ continue;
if (NULL == ms)
return(1);