version 1.75, 2017/07/19 14:05:13 |
version 1.79, 2018/11/22 12:01:46 |
|
|
/* $OpenBSD$ */ |
/* $Id$ */ |
/* |
/* |
* Copyright (c) 2012 Kristaps Dzonsons <kristaps@bsd.lv> |
* Copyright (c) 2012 Kristaps Dzonsons <kristaps@bsd.lv> |
* Copyright (c) 2013-2017 Ingo Schwarze <schwarze@openbsd.org> |
* Copyright (c) 2013-2018 Ingo Schwarze <schwarze@openbsd.org> |
* |
* |
* Permission to use, copy, modify, and distribute this software for any |
* Permission to use, copy, modify, and distribute this software for any |
* purpose with or without fee is hereby granted, provided that the above |
* purpose with or without fee is hereby granted, provided that the above |
Line 171 mansearch(const struct mansearch *search, |
|
Line 171 mansearch(const struct mansearch *search, |
|
page = dbm_page_get(rp->page); |
page = dbm_page_get(rp->page); |
|
|
if (lstmatch(search->sec, page->sect) == 0 || |
if (lstmatch(search->sec, page->sect) == 0 || |
lstmatch(search->arch, page->arch) == 0) |
lstmatch(search->arch, page->arch) == 0 || |
|
(search->argmode == ARG_NAME && |
|
rp->bits <= (int32_t)(NAME_SYN & NAME_MASK))) |
continue; |
continue; |
|
|
if (res == NULL) { |
if (res == NULL) { |
Line 186 mansearch(const struct mansearch *search, |
|
Line 188 mansearch(const struct mansearch *search, |
|
mpage = *res + cur; |
mpage = *res + cur; |
mandoc_asprintf(&mpage->file, "%s/%s", |
mandoc_asprintf(&mpage->file, "%s/%s", |
paths->paths[i], page->file + 1); |
paths->paths[i], page->file + 1); |
|
if (access(chdir_status ? page->file + 1 : |
|
mpage->file, R_OK) == -1) { |
|
warn("%s", mpage->file); |
|
warnx("outdated mandoc.db contains " |
|
"bogus %s entry, run makewhatis %s", |
|
page->file + 1, paths->paths[i]); |
|
free(mpage->file); |
|
free(rp); |
|
continue; |
|
} |
mpage->names = buildnames(page); |
mpage->names = buildnames(page); |
mpage->output = buildoutput(outkey, page); |
mpage->output = buildoutput(outkey, page); |
mpage->ipath = i; |
mpage->ipath = i; |
mpage->bits = rp->bits; |
|
mpage->sec = *page->sect - '0'; |
mpage->sec = *page->sect - '0'; |
if (mpage->sec < 0 || mpage->sec > 9) |
if (mpage->sec < 0 || mpage->sec > 9) |
mpage->sec = 10; |
mpage->sec = 10; |
Line 284 manmerge_term(struct expr *e, struct ohash *htab) |
|
Line 295 manmerge_term(struct expr *e, struct ohash *htab) |
|
break; |
break; |
slot = ohash_lookup_memory(htab, |
slot = ohash_lookup_memory(htab, |
(char *)&res, sizeof(res.page), res.page); |
(char *)&res, sizeof(res.page), res.page); |
if ((rp = ohash_find(htab, slot)) != NULL) { |
if ((rp = ohash_find(htab, slot)) != NULL) |
rp->bits |= res.bits; |
|
continue; |
continue; |
} |
|
rp = mandoc_malloc(sizeof(*rp)); |
rp = mandoc_malloc(sizeof(*rp)); |
*rp = res; |
*rp = res; |
ohash_insert(htab, slot, rp); |
ohash_insert(htab, slot, rp); |
Line 400 manpage_compare(const void *vp1, const void *vp2) |
|
Line 409 manpage_compare(const void *vp1, const void *vp2) |
|
|
|
mp1 = vp1; |
mp1 = vp1; |
mp2 = vp2; |
mp2 = vp2; |
if ((diff = mp2->bits - mp1->bits) || |
if ((diff = mp1->sec - mp2->sec)) |
(diff = mp1->sec - mp2->sec)) |
|
return diff; |
return diff; |
|
|
/* Fall back to alphabetic ordering of names. */ |
/* Fall back to alphabetic ordering of names. */ |
Line 452 lstlen(const char *cp, size_t sep) |
|
Line 460 lstlen(const char *cp, size_t sep) |
|
{ |
{ |
size_t sz; |
size_t sz; |
|
|
for (sz = 0;; sz++) { |
for (sz = 0; *cp != '\0'; cp++) { |
if (cp[0] == '\0') { |
|
if (cp[1] == '\0') |
/* Skip names appearing only in the SYNOPSIS. */ |
break; |
if (*cp <= (char)(NAME_SYN & NAME_MASK)) { |
sz += sep - 1; |
while (*cp != '\0') |
} else if (cp[0] < ' ') |
cp++; |
sz--; |
continue; |
cp++; |
} |
|
|
|
/* Skip name class markers. */ |
|
if (*cp < ' ') |
|
cp++; |
|
|
|
/* Print a separator before each but the first string. */ |
|
if (sz) |
|
sz += sep; |
|
|
|
/* Copy one string. */ |
|
while (*cp != '\0') { |
|
sz++; |
|
cp++; |
|
} |
} |
} |
return sz; |
return sz; |
} |
} |
Line 471 lstlen(const char *cp, size_t sep) |
|
Line 493 lstlen(const char *cp, size_t sep) |
|
static void |
static void |
lstcat(char *buf, size_t *i, const char *cp, const char *sep) |
lstcat(char *buf, size_t *i, const char *cp, const char *sep) |
{ |
{ |
const char *s; |
const char *s; |
|
size_t i_start; |
|
|
for (;;) { |
for (i_start = *i; *cp != '\0'; cp++) { |
if (cp[0] == '\0') { |
|
if (cp[1] == '\0') |
/* Skip names appearing only in the SYNOPSIS. */ |
break; |
if (*cp <= (char)(NAME_SYN & NAME_MASK)) { |
|
while (*cp != '\0') |
|
cp++; |
|
continue; |
|
} |
|
|
|
/* Skip name class markers. */ |
|
if (*cp < ' ') |
|
cp++; |
|
|
|
/* Print a separator before each but the first string. */ |
|
if (*i > i_start) { |
s = sep; |
s = sep; |
while (*s != '\0') |
while (*s != '\0') |
buf[(*i)++] = *s++; |
buf[(*i)++] = *s++; |
} else if (cp[0] >= ' ') |
} |
buf[(*i)++] = cp[0]; |
|
cp++; |
/* Copy one string. */ |
|
while (*cp != '\0') |
|
buf[(*i)++] = *cp++; |
} |
} |
|
|
} |
} |
|
|
/* |
/* |
Line 733 exprterm(const struct mansearch *search, int argc, cha |
|
Line 770 exprterm(const struct mansearch *search, int argc, cha |
|
cs = 0; |
cs = 0; |
} else if ((val = strpbrk(argv[*argi], "=~")) == NULL) { |
} else if ((val = strpbrk(argv[*argi], "=~")) == NULL) { |
e->bits = TYPE_Nm | TYPE_Nd; |
e->bits = TYPE_Nm | TYPE_Nd; |
e->match.type = DBM_SUB; |
e->match.type = DBM_REGEX; |
e->match.str = argv[*argi]; |
val = argv[*argi]; |
|
cs = 0; |
} else { |
} else { |
if (val == argv[*argi]) |
if (val == argv[*argi]) |
e->bits = TYPE_Nm | TYPE_Nd; |
e->bits = TYPE_Nm | TYPE_Nd; |