version 1.243, 2017/02/17 14:31:52 |
version 1.250, 2017/05/17 22:27:12 |
Line 183 static struct ohash names; /* table of all names */ |
|
Line 183 static struct ohash names; /* table of all names */ |
|
static struct ohash strings; /* table of all strings */ |
static struct ohash strings; /* table of all strings */ |
static uint64_t name_mask; |
static uint64_t name_mask; |
|
|
static const struct mdoc_handler mdocs[MDOC_MAX] = { |
static const struct mdoc_handler __mdocs[MDOC_MAX - MDOC_Dd] = { |
{ NULL, 0, 0 }, /* Ap */ |
|
{ NULL, 0, NODE_NOPRT }, /* Dd */ |
{ NULL, 0, NODE_NOPRT }, /* Dd */ |
{ NULL, 0, NODE_NOPRT }, /* Dt */ |
{ NULL, 0, NODE_NOPRT }, /* Dt */ |
{ NULL, 0, NODE_NOPRT }, /* Os */ |
{ NULL, 0, NODE_NOPRT }, /* Os */ |
Line 200 static const struct mdoc_handler mdocs[MDOC_MAX] = { |
|
Line 199 static const struct mdoc_handler mdocs[MDOC_MAX] = { |
|
{ NULL, 0, 0 }, /* It */ |
{ NULL, 0, 0 }, /* It */ |
{ NULL, 0, 0 }, /* Ad */ |
{ NULL, 0, 0 }, /* Ad */ |
{ NULL, TYPE_An, 0 }, /* An */ |
{ NULL, TYPE_An, 0 }, /* An */ |
|
{ NULL, 0, 0 }, /* Ap */ |
{ NULL, TYPE_Ar, 0 }, /* Ar */ |
{ NULL, TYPE_Ar, 0 }, /* Ar */ |
{ NULL, TYPE_Cd, 0 }, /* Cd */ |
{ NULL, TYPE_Cd, 0 }, /* Cd */ |
{ NULL, TYPE_Cm, 0 }, /* Cm */ |
{ NULL, TYPE_Cm, 0 }, /* Cm */ |
Line 302 static const struct mdoc_handler mdocs[MDOC_MAX] = { |
|
Line 302 static const struct mdoc_handler mdocs[MDOC_MAX] = { |
|
{ NULL, 0, 0 }, /* En */ |
{ NULL, 0, 0 }, /* En */ |
{ NULL, TYPE_Dx, NODE_NOSRC }, /* Dx */ |
{ NULL, TYPE_Dx, NODE_NOSRC }, /* Dx */ |
{ NULL, 0, 0 }, /* %Q */ |
{ NULL, 0, 0 }, /* %Q */ |
{ NULL, 0, 0 }, /* br */ |
|
{ NULL, 0, 0 }, /* sp */ |
|
{ NULL, 0, 0 }, /* %U */ |
{ NULL, 0, 0 }, /* %U */ |
{ NULL, 0, 0 }, /* Ta */ |
{ NULL, 0, 0 }, /* Ta */ |
{ NULL, 0, 0 }, /* ll */ |
|
}; |
}; |
|
static const struct mdoc_handler *const mdocs = __mdocs - MDOC_Dd; |
|
|
|
|
int |
int |
|
|
const char *argv[2]; |
const char *argv[2]; |
|
|
argv[0] = "."; |
argv[0] = "."; |
argv[1] = (char *)NULL; |
argv[1] = NULL; |
|
|
f = fts_open((char * const *)argv, FTS_PHYSICAL | FTS_NOCHDIR, |
f = fts_open((char * const *)argv, FTS_PHYSICAL | FTS_NOCHDIR, |
fts_compare); |
fts_compare); |
Line 1211 mpages_merge(struct dba *dba, struct mparse *mp) |
|
Line 1209 mpages_merge(struct dba *dba, struct mparse *mp) |
|
} else if (man != NULL && man->macroset == MACROSET_MAN) { |
} else if (man != NULL && man->macroset == MACROSET_MAN) { |
man_validate(man); |
man_validate(man); |
if (*man->meta.msec != '\0' || |
if (*man->meta.msec != '\0' || |
*man->meta.msec != '\0') { |
*man->meta.title != '\0') { |
mpage->form = FORM_SRC; |
mpage->form = FORM_SRC; |
mpage->sec = mandoc_strdup(man->meta.msec); |
mpage->sec = mandoc_strdup(man->meta.msec); |
mpage->arch = mandoc_strdup(mlink->arch); |
mpage->arch = mandoc_strdup(mlink->arch); |
Line 1545 parse_mdoc(struct mpage *mpage, const struct roff_meta |
|
Line 1543 parse_mdoc(struct mpage *mpage, const struct roff_meta |
|
const struct roff_node *n) |
const struct roff_node *n) |
{ |
{ |
|
|
assert(NULL != n); |
for (n = n->child; n != NULL; n = n->next) { |
for (n = n->child; NULL != n; n = n->next) { |
if (n->tok == TOKEN_NONE || |
if (n->flags & mdocs[n->tok].taboo) |
n->tok < ROFF_MAX || |
|
n->flags & mdocs[n->tok].taboo) |
continue; |
continue; |
|
assert(n->tok >= MDOC_Dd && n->tok < MDOC_MAX); |
switch (n->type) { |
switch (n->type) { |
case ROFFT_ELEM: |
case ROFFT_ELEM: |
case ROFFT_BLOCK: |
case ROFFT_BLOCK: |
case ROFFT_HEAD: |
case ROFFT_HEAD: |
case ROFFT_BODY: |
case ROFFT_BODY: |
case ROFFT_TAIL: |
case ROFFT_TAIL: |
if (NULL != mdocs[n->tok].fp) |
if (mdocs[n->tok].fp != NULL && |
if (0 == (*mdocs[n->tok].fp)(mpage, meta, n)) |
(*mdocs[n->tok].fp)(mpage, meta, n) == 0) |
break; |
break; |
if (mdocs[n->tok].mask) |
if (mdocs[n->tok].mask) |
putmdockey(mpage, n->child, |
putmdockey(mpage, n->child, |
mdocs[n->tok].mask, mdocs[n->tok].taboo); |
mdocs[n->tok].mask, mdocs[n->tok].taboo); |
break; |
break; |
default: |
default: |
assert(n->type != ROFFT_ROOT); |
|
continue; |
continue; |
} |
} |
if (NULL != n->child) |
if (NULL != n->child) |
Line 2123 dbwrite(struct dba *dba) |
|
Line 2122 dbwrite(struct dba *dba) |
|
int status; |
int status; |
pid_t child; |
pid_t child; |
|
|
|
/* |
|
* Do not write empty databases, and delete existing ones |
|
* when makewhatis -u causes them to become empty. |
|
*/ |
|
|
|
dba_array_start(dba->pages); |
|
if (dba_array_next(dba->pages) == NULL) { |
|
if (unlink(MANDOC_DB) == -1) |
|
say(MANDOC_DB, "&unlink"); |
|
return; |
|
} |
|
|
|
/* |
|
* Build the database in a temporary file, |
|
* then atomically move it into place. |
|
*/ |
|
|
if (dba_write(MANDOC_DB "~", dba) != -1) { |
if (dba_write(MANDOC_DB "~", dba) != -1) { |
if (rename(MANDOC_DB "~", MANDOC_DB) == -1) { |
if (rename(MANDOC_DB "~", MANDOC_DB) == -1) { |
exitcode = (int)MANDOCLEVEL_SYSERR; |
exitcode = (int)MANDOCLEVEL_SYSERR; |
Line 2131 dbwrite(struct dba *dba) |
|
Line 2147 dbwrite(struct dba *dba) |
|
} |
} |
return; |
return; |
} |
} |
|
|
|
/* |
|
* We lack write permission and cannot replace the database |
|
* file, but let's at least check whether the data changed. |
|
*/ |
|
|
(void)strlcpy(tfn, "/tmp/mandocdb.XXXXXXXX", sizeof(tfn)); |
(void)strlcpy(tfn, "/tmp/mandocdb.XXXXXXXX", sizeof(tfn)); |
if (mkdtemp(tfn) == NULL) { |
if (mkdtemp(tfn) == NULL) { |