version 1.189, 2015/04/02 22:48:17 |
version 1.197, 2015/10/06 18:32:19 |
|
|
STMT__MAX |
STMT__MAX |
}; |
}; |
|
|
typedef int (*mdoc_fp)(struct mpage *, const struct mdoc_meta *, |
typedef int (*mdoc_fp)(struct mpage *, const struct roff_meta *, |
const struct roff_node *); |
const struct roff_node *); |
|
|
struct mdoc_handler { |
struct mdoc_handler { |
Line 156 static void mpages_free(void); |
|
Line 156 static void mpages_free(void); |
|
static void mpages_merge(struct mparse *); |
static void mpages_merge(struct mparse *); |
static void names_check(void); |
static void names_check(void); |
static void parse_cat(struct mpage *, int); |
static void parse_cat(struct mpage *, int); |
static void parse_man(struct mpage *, const struct man_meta *, |
static void parse_man(struct mpage *, const struct roff_meta *, |
const struct roff_node *); |
const struct roff_node *); |
static void parse_mdoc(struct mpage *, const struct mdoc_meta *, |
static void parse_mdoc(struct mpage *, const struct roff_meta *, |
const struct roff_node *); |
const struct roff_node *); |
static int parse_mdoc_body(struct mpage *, const struct mdoc_meta *, |
static int parse_mdoc_body(struct mpage *, const struct roff_meta *, |
const struct roff_node *); |
const struct roff_node *); |
static int parse_mdoc_head(struct mpage *, const struct mdoc_meta *, |
static int parse_mdoc_head(struct mpage *, const struct roff_meta *, |
const struct roff_node *); |
const struct roff_node *); |
static int parse_mdoc_Fd(struct mpage *, const struct mdoc_meta *, |
static int parse_mdoc_Fd(struct mpage *, const struct roff_meta *, |
const struct roff_node *); |
const struct roff_node *); |
static void parse_mdoc_fname(struct mpage *, const struct roff_node *); |
static void parse_mdoc_fname(struct mpage *, const struct roff_node *); |
static int parse_mdoc_Fn(struct mpage *, const struct mdoc_meta *, |
static int parse_mdoc_Fn(struct mpage *, const struct roff_meta *, |
const struct roff_node *); |
const struct roff_node *); |
static int parse_mdoc_Fo(struct mpage *, const struct mdoc_meta *, |
static int parse_mdoc_Fo(struct mpage *, const struct roff_meta *, |
const struct roff_node *); |
const struct roff_node *); |
static int parse_mdoc_Nd(struct mpage *, const struct mdoc_meta *, |
static int parse_mdoc_Nd(struct mpage *, const struct roff_meta *, |
const struct roff_node *); |
const struct roff_node *); |
static int parse_mdoc_Nm(struct mpage *, const struct mdoc_meta *, |
static int parse_mdoc_Nm(struct mpage *, const struct roff_meta *, |
const struct roff_node *); |
const struct roff_node *); |
static int parse_mdoc_Sh(struct mpage *, const struct mdoc_meta *, |
static int parse_mdoc_Sh(struct mpage *, const struct roff_meta *, |
const struct roff_node *); |
const struct roff_node *); |
static int parse_mdoc_Xr(struct mpage *, const struct mdoc_meta *, |
static int parse_mdoc_Xr(struct mpage *, const struct roff_meta *, |
const struct roff_node *); |
const struct roff_node *); |
static void putkey(const struct mpage *, char *, uint64_t); |
static void putkey(const struct mpage *, char *, uint64_t); |
static void putkeys(const struct mpage *, char *, size_t, uint64_t); |
static void putkeys(const struct mpage *, char *, size_t, uint64_t); |
|
|
mpages_free(); |
mpages_free(); |
ohash_delete(&mpages); |
ohash_delete(&mpages); |
ohash_delete(&mlinks); |
ohash_delete(&mlinks); |
return(exitcode); |
return exitcode; |
usage: |
usage: |
fprintf(stderr, "usage: %s [-aDnpQ] [-C file] [-Tutf8]\n" |
fprintf(stderr, "usage: %s [-aDnpQ] [-C file] [-Tutf8]\n" |
" %s [-aDnpQ] [-Tutf8] dir ...\n" |
" %s [-aDnpQ] [-Tutf8] dir ...\n" |
|
|
progname, progname, progname, |
progname, progname, progname, |
progname, progname); |
progname, progname); |
|
|
return((int)MANDOCLEVEL_BADARG); |
return (int)MANDOCLEVEL_BADARG; |
} |
} |
|
|
/* |
/* |
|
|
if (NULL == f) { |
if (NULL == f) { |
exitcode = (int)MANDOCLEVEL_SYSERR; |
exitcode = (int)MANDOCLEVEL_SYSERR; |
say("", "&fts_open"); |
say("", "&fts_open"); |
return(0); |
return 0; |
} |
} |
|
|
dsec = arch = NULL; |
dsec = arch = NULL; |
|
|
} |
} |
|
|
fts_close(f); |
fts_close(f); |
return(1); |
return 1; |
} |
} |
|
|
/* |
/* |
Line 1107 mpages_merge(struct mparse *mp) |
|
Line 1107 mpages_merge(struct mparse *mp) |
|
struct ohash_info str_info; |
struct ohash_info str_info; |
struct mpage *mpage, *mpage_dest; |
struct mpage *mpage, *mpage_dest; |
struct mlink *mlink, *mlink_dest; |
struct mlink *mlink, *mlink_dest; |
struct mdoc *mdoc; |
struct roff_man *man; |
struct man *man; |
|
char *sodest; |
char *sodest; |
char *cp; |
char *cp; |
int fd; |
int fd; |
Line 1135 mpages_merge(struct mparse *mp) |
|
Line 1134 mpages_merge(struct mparse *mp) |
|
ohash_init(&names, 4, &str_info); |
ohash_init(&names, 4, &str_info); |
ohash_init(&strings, 6, &str_info); |
ohash_init(&strings, 6, &str_info); |
mparse_reset(mp); |
mparse_reset(mp); |
mdoc = NULL; |
|
man = NULL; |
man = NULL; |
sodest = NULL; |
sodest = NULL; |
|
|
Line 1151 mpages_merge(struct mparse *mp) |
|
Line 1149 mpages_merge(struct mparse *mp) |
|
*/ |
*/ |
if (mlink->dform != FORM_CAT || mlink->fform != FORM_CAT) { |
if (mlink->dform != FORM_CAT || mlink->fform != FORM_CAT) { |
mparse_readfd(mp, fd, mlink->file); |
mparse_readfd(mp, fd, mlink->file); |
mparse_result(mp, &mdoc, &man, &sodest); |
mparse_result(mp, &man, &sodest); |
} |
} |
|
|
if (sodest != NULL) { |
if (sodest != NULL) { |
Line 1195 mpages_merge(struct mparse *mp) |
|
Line 1193 mpages_merge(struct mparse *mp) |
|
mpage->mlinks = NULL; |
mpage->mlinks = NULL; |
} |
} |
goto nextpage; |
goto nextpage; |
} else if (mdoc != NULL) { |
} else if (man != NULL && man->macroset == MACROSET_MDOC) { |
mpage->form = FORM_SRC; |
mpage->form = FORM_SRC; |
mpage->sec = mdoc_meta(mdoc)->msec; |
mpage->sec = man->meta.msec; |
mpage->sec = mandoc_strdup( |
mpage->sec = mandoc_strdup( |
mpage->sec == NULL ? "" : mpage->sec); |
mpage->sec == NULL ? "" : mpage->sec); |
mpage->arch = mdoc_meta(mdoc)->arch; |
mpage->arch = man->meta.arch; |
mpage->arch = mandoc_strdup( |
mpage->arch = mandoc_strdup( |
mpage->arch == NULL ? "" : mpage->arch); |
mpage->arch == NULL ? "" : mpage->arch); |
mpage->title = |
mpage->title = mandoc_strdup(man->meta.title); |
mandoc_strdup(mdoc_meta(mdoc)->title); |
} else if (man != NULL && man->macroset == MACROSET_MAN) { |
} else if (man != NULL) { |
|
mpage->form = FORM_SRC; |
mpage->form = FORM_SRC; |
mpage->sec = mandoc_strdup(man_meta(man)->msec); |
mpage->sec = mandoc_strdup(man->meta.msec); |
mpage->arch = mandoc_strdup(mlink->arch); |
mpage->arch = mandoc_strdup(mlink->arch); |
mpage->title = mandoc_strdup(man_meta(man)->title); |
mpage->title = mandoc_strdup(man->meta.title); |
} else { |
} else { |
mpage->form = FORM_CAT; |
mpage->form = FORM_CAT; |
mpage->sec = mandoc_strdup(mlink->dsec); |
mpage->sec = mandoc_strdup(mlink->dsec); |
Line 1231 mpages_merge(struct mparse *mp) |
|
Line 1228 mpages_merge(struct mparse *mp) |
|
} |
} |
|
|
assert(mpage->desc == NULL); |
assert(mpage->desc == NULL); |
if (mdoc != NULL) |
if (man != NULL && man->macroset == MACROSET_MDOC) |
parse_mdoc(mpage, mdoc_meta(mdoc), mdoc_node(mdoc)); |
parse_mdoc(mpage, &man->meta, man->first); |
else if (man != NULL) |
else if (man != NULL) |
parse_man(mpage, man_meta(man), man_node(man)); |
parse_man(mpage, &man->meta, man->first); |
else |
else |
parse_cat(mpage, fd); |
parse_cat(mpage, fd); |
if (mpage->desc == NULL) |
if (mpage->desc == NULL) |
Line 1249 mpages_merge(struct mparse *mp) |
|
Line 1246 mpages_merge(struct mparse *mp) |
|
mlink = mpage->mlinks; |
mlink = mpage->mlinks; |
|
|
nextpage: |
nextpage: |
if (mparse_wait(mp) != MANDOCLEVEL_OK) { |
|
exitcode = (int)MANDOCLEVEL_SYSERR; |
|
say(mlink->file, "&wait gunzip"); |
|
} |
|
ohash_delete(&strings); |
ohash_delete(&strings); |
ohash_delete(&names); |
ohash_delete(&names); |
mpage = ohash_next(&mpages, &pslot); |
mpage = ohash_next(&mpages, &pslot); |
Line 1443 putmdockey(const struct mpage *mpage, |
|
Line 1436 putmdockey(const struct mpage *mpage, |
|
} |
} |
|
|
static void |
static void |
parse_man(struct mpage *mpage, const struct man_meta *meta, |
parse_man(struct mpage *mpage, const struct roff_meta *meta, |
const struct roff_node *n) |
const struct roff_node *n) |
{ |
{ |
const struct roff_node *head, *body; |
const struct roff_node *head, *body; |
Line 1479 parse_man(struct mpage *mpage, const struct man_meta * |
|
Line 1472 parse_man(struct mpage *mpage, const struct man_meta * |
|
*/ |
*/ |
|
|
title = NULL; |
title = NULL; |
man_deroff(&title, body); |
deroff(&title, body); |
if (NULL == title) |
if (NULL == title) |
return; |
return; |
|
|
Line 1569 parse_man(struct mpage *mpage, const struct man_meta * |
|
Line 1562 parse_man(struct mpage *mpage, const struct man_meta * |
|
} |
} |
|
|
static void |
static void |
parse_mdoc(struct mpage *mpage, const struct mdoc_meta *meta, |
parse_mdoc(struct mpage *mpage, const struct roff_meta *meta, |
const struct roff_node *n) |
const struct roff_node *n) |
{ |
{ |
|
|
Line 1602 parse_mdoc(struct mpage *mpage, const struct mdoc_meta |
|
Line 1595 parse_mdoc(struct mpage *mpage, const struct mdoc_meta |
|
} |
} |
|
|
static int |
static int |
parse_mdoc_Fd(struct mpage *mpage, const struct mdoc_meta *meta, |
parse_mdoc_Fd(struct mpage *mpage, const struct roff_meta *meta, |
const struct roff_node *n) |
const struct roff_node *n) |
{ |
{ |
char *start, *end; |
char *start, *end; |
Line 1611 parse_mdoc_Fd(struct mpage *mpage, const struct mdoc_m |
|
Line 1604 parse_mdoc_Fd(struct mpage *mpage, const struct mdoc_m |
|
if (SEC_SYNOPSIS != n->sec || |
if (SEC_SYNOPSIS != n->sec || |
NULL == (n = n->child) || |
NULL == (n = n->child) || |
n->type != ROFFT_TEXT) |
n->type != ROFFT_TEXT) |
return(0); |
return 0; |
|
|
/* |
/* |
* Only consider those `Fd' macro fields that begin with an |
* Only consider those `Fd' macro fields that begin with an |
Line 1619 parse_mdoc_Fd(struct mpage *mpage, const struct mdoc_m |
|
Line 1612 parse_mdoc_Fd(struct mpage *mpage, const struct mdoc_m |
|
*/ |
*/ |
|
|
if (strcmp("#include", n->string)) |
if (strcmp("#include", n->string)) |
return(0); |
return 0; |
|
|
if ((n = n->next) == NULL || n->type != ROFFT_TEXT) |
if ((n = n->next) == NULL || n->type != ROFFT_TEXT) |
return(0); |
return 0; |
|
|
/* |
/* |
* Strip away the enclosing angle brackets and make sure we're |
* Strip away the enclosing angle brackets and make sure we're |
Line 1634 parse_mdoc_Fd(struct mpage *mpage, const struct mdoc_m |
|
Line 1627 parse_mdoc_Fd(struct mpage *mpage, const struct mdoc_m |
|
start++; |
start++; |
|
|
if (0 == (sz = strlen(start))) |
if (0 == (sz = strlen(start))) |
return(0); |
return 0; |
|
|
end = &start[(int)sz - 1]; |
end = &start[(int)sz - 1]; |
if ('>' == *end || '"' == *end) |
if ('>' == *end || '"' == *end) |
Line 1642 parse_mdoc_Fd(struct mpage *mpage, const struct mdoc_m |
|
Line 1635 parse_mdoc_Fd(struct mpage *mpage, const struct mdoc_m |
|
|
|
if (end > start) |
if (end > start) |
putkeys(mpage, start, end - start + 1, TYPE_In); |
putkeys(mpage, start, end - start + 1, TYPE_In); |
return(0); |
return 0; |
} |
} |
|
|
static void |
static void |
Line 1667 parse_mdoc_fname(struct mpage *mpage, const struct rof |
|
Line 1660 parse_mdoc_fname(struct mpage *mpage, const struct rof |
|
} |
} |
|
|
static int |
static int |
parse_mdoc_Fn(struct mpage *mpage, const struct mdoc_meta *meta, |
parse_mdoc_Fn(struct mpage *mpage, const struct roff_meta *meta, |
const struct roff_node *n) |
const struct roff_node *n) |
{ |
{ |
|
|
if (n->child == NULL) |
if (n->child == NULL) |
return(0); |
return 0; |
|
|
parse_mdoc_fname(mpage, n->child); |
parse_mdoc_fname(mpage, n->child); |
|
|
Line 1680 parse_mdoc_Fn(struct mpage *mpage, const struct mdoc_m |
|
Line 1673 parse_mdoc_Fn(struct mpage *mpage, const struct mdoc_m |
|
if (n->type == ROFFT_TEXT) |
if (n->type == ROFFT_TEXT) |
putkey(mpage, n->string, TYPE_Fa); |
putkey(mpage, n->string, TYPE_Fa); |
|
|
return(0); |
return 0; |
} |
} |
|
|
static int |
static int |
parse_mdoc_Fo(struct mpage *mpage, const struct mdoc_meta *meta, |
parse_mdoc_Fo(struct mpage *mpage, const struct roff_meta *meta, |
const struct roff_node *n) |
const struct roff_node *n) |
{ |
{ |
|
|
if (n->type != ROFFT_HEAD) |
if (n->type != ROFFT_HEAD) |
return(1); |
return 1; |
|
|
if (n->child != NULL) |
if (n->child != NULL) |
parse_mdoc_fname(mpage, n->child); |
parse_mdoc_fname(mpage, n->child); |
|
|
return(0); |
return 0; |
} |
} |
|
|
static int |
static int |
parse_mdoc_Xr(struct mpage *mpage, const struct mdoc_meta *meta, |
parse_mdoc_Xr(struct mpage *mpage, const struct roff_meta *meta, |
const struct roff_node *n) |
const struct roff_node *n) |
{ |
{ |
char *cp; |
char *cp; |
|
|
if (NULL == (n = n->child)) |
if (NULL == (n = n->child)) |
return(0); |
return 0; |
|
|
if (NULL == n->next) { |
if (NULL == n->next) { |
putkey(mpage, n->string, TYPE_Xr); |
putkey(mpage, n->string, TYPE_Xr); |
return(0); |
return 0; |
} |
} |
|
|
mandoc_asprintf(&cp, "%s(%s)", n->string, n->next->string); |
mandoc_asprintf(&cp, "%s(%s)", n->string, n->next->string); |
putkey(mpage, cp, TYPE_Xr); |
putkey(mpage, cp, TYPE_Xr); |
free(cp); |
free(cp); |
return(0); |
return 0; |
} |
} |
|
|
static int |
static int |
parse_mdoc_Nd(struct mpage *mpage, const struct mdoc_meta *meta, |
parse_mdoc_Nd(struct mpage *mpage, const struct roff_meta *meta, |
const struct roff_node *n) |
const struct roff_node *n) |
{ |
{ |
|
|
if (n->type == ROFFT_BODY) |
if (n->type == ROFFT_BODY) |
mdoc_deroff(&mpage->desc, n); |
deroff(&mpage->desc, n); |
return(0); |
return 0; |
} |
} |
|
|
static int |
static int |
parse_mdoc_Nm(struct mpage *mpage, const struct mdoc_meta *meta, |
parse_mdoc_Nm(struct mpage *mpage, const struct roff_meta *meta, |
const struct roff_node *n) |
const struct roff_node *n) |
{ |
{ |
|
|
Line 1746 parse_mdoc_Nm(struct mpage *mpage, const struct mdoc_m |
|
Line 1739 parse_mdoc_Nm(struct mpage *mpage, const struct mdoc_m |
|
putkey(mpage, n->child->string, ROFFT_HEAD); |
putkey(mpage, n->child->string, ROFFT_HEAD); |
mpage->name_head_done = 1; |
mpage->name_head_done = 1; |
} |
} |
return(0); |
return 0; |
} |
} |
|
|
static int |
static int |
parse_mdoc_Sh(struct mpage *mpage, const struct mdoc_meta *meta, |
parse_mdoc_Sh(struct mpage *mpage, const struct roff_meta *meta, |
const struct roff_node *n) |
const struct roff_node *n) |
{ |
{ |
|
|
return(n->sec == SEC_CUSTOM && n->type == ROFFT_HEAD); |
return n->sec == SEC_CUSTOM && n->type == ROFFT_HEAD; |
} |
} |
|
|
static int |
static int |
parse_mdoc_head(struct mpage *mpage, const struct mdoc_meta *meta, |
parse_mdoc_head(struct mpage *mpage, const struct roff_meta *meta, |
const struct roff_node *n) |
const struct roff_node *n) |
{ |
{ |
|
|
return(n->type == ROFFT_HEAD); |
return n->type == ROFFT_HEAD; |
} |
} |
|
|
static int |
static int |
parse_mdoc_body(struct mpage *mpage, const struct mdoc_meta *meta, |
parse_mdoc_body(struct mpage *mpage, const struct roff_meta *meta, |
const struct roff_node *n) |
const struct roff_node *n) |
{ |
{ |
|
|
return(n->type == ROFFT_BODY); |
return n->type == ROFFT_BODY; |
} |
} |
|
|
/* |
/* |
Line 1875 utf8(unsigned int cp, char out[7]) |
|
Line 1868 utf8(unsigned int cp, char out[7]) |
|
out[4] = (cp >> 6 & 63) | 128; |
out[4] = (cp >> 6 & 63) | 128; |
out[5] = (cp & 63) | 128; |
out[5] = (cp & 63) | 128; |
} else |
} else |
return(0); |
return 0; |
|
|
out[rc] = '\0'; |
out[rc] = '\0'; |
return(rc); |
return rc; |
} |
} |
|
|
/* |
/* |
Line 2002 render_string(char **public, size_t *psz) |
|
Line 1995 render_string(char **public, size_t *psz) |
|
--*psz; |
--*psz; |
if (dst != NULL) { |
if (dst != NULL) { |
(*public)[*psz] = '\0'; |
(*public)[*psz] = '\0'; |
return(1); |
return 1; |
} else |
} else |
return(0); |
return 0; |
} |
} |
|
|
static void |
static void |
Line 2215 dbclose(int real) |
|
Line 2208 dbclose(int real) |
|
return; |
return; |
case 0: |
case 0: |
execlp("cmp", "cmp", "-s", |
execlp("cmp", "cmp", "-s", |
tempfilename, MANDOC_DB, NULL); |
tempfilename, MANDOC_DB, (char *)NULL); |
say("", "&exec cmp"); |
say("", "&exec cmp"); |
exit(0); |
exit(0); |
default: |
default: |
Line 2240 dbclose(int real) |
|
Line 2233 dbclose(int real) |
|
say("", "&fork rm"); |
say("", "&fork rm"); |
return; |
return; |
case 0: |
case 0: |
execlp("rm", "rm", "-rf", tempfilename, NULL); |
execlp("rm", "rm", "-rf", tempfilename, (char *)NULL); |
say("", "&exec rm"); |
say("", "&exec rm"); |
exit((int)MANDOCLEVEL_SYSERR); |
exit((int)MANDOCLEVEL_SYSERR); |
default: |
default: |
Line 2271 dbopen(int real) |
|
Line 2264 dbopen(int real) |
|
int rc, ofl; |
int rc, ofl; |
|
|
if (nodb) |
if (nodb) |
return(1); |
return 1; |
|
|
*tempfilename = '\0'; |
*tempfilename = '\0'; |
ofl = SQLITE_OPEN_READWRITE; |
ofl = SQLITE_OPEN_READWRITE; |
Line 2282 dbopen(int real) |
|
Line 2275 dbopen(int real) |
|
exitcode = (int)MANDOCLEVEL_SYSERR; |
exitcode = (int)MANDOCLEVEL_SYSERR; |
if (SQLITE_CANTOPEN != rc) |
if (SQLITE_CANTOPEN != rc) |
say(MANDOC_DB, "%s", sqlite3_errstr(rc)); |
say(MANDOC_DB, "%s", sqlite3_errstr(rc)); |
return(0); |
return 0; |
} |
} |
goto prepare_statements; |
goto prepare_statements; |
} |
} |
Line 2296 dbopen(int real) |
|
Line 2289 dbopen(int real) |
|
if (MPARSE_QUICK & mparse_options) { |
if (MPARSE_QUICK & mparse_options) { |
exitcode = (int)MANDOCLEVEL_SYSERR; |
exitcode = (int)MANDOCLEVEL_SYSERR; |
say(MANDOC_DB "~", "%s", sqlite3_errstr(rc)); |
say(MANDOC_DB "~", "%s", sqlite3_errstr(rc)); |
return(0); |
return 0; |
} |
} |
|
|
(void)strlcpy(tempfilename, "/tmp/mandocdb.XXXXXX", |
(void)strlcpy(tempfilename, "/tmp/mandocdb.XXXXXX", |
Line 2304 dbopen(int real) |
|
Line 2297 dbopen(int real) |
|
if (NULL == mkdtemp(tempfilename)) { |
if (NULL == mkdtemp(tempfilename)) { |
exitcode = (int)MANDOCLEVEL_SYSERR; |
exitcode = (int)MANDOCLEVEL_SYSERR; |
say("", "&%s", tempfilename); |
say("", "&%s", tempfilename); |
return(0); |
return 0; |
} |
} |
(void)strlcat(tempfilename, "/" MANDOC_DB, |
(void)strlcat(tempfilename, "/" MANDOC_DB, |
sizeof(tempfilename)); |
sizeof(tempfilename)); |
Line 2312 dbopen(int real) |
|
Line 2305 dbopen(int real) |
|
if (SQLITE_OK != rc) { |
if (SQLITE_OK != rc) { |
exitcode = (int)MANDOCLEVEL_SYSERR; |
exitcode = (int)MANDOCLEVEL_SYSERR; |
say("", "%s: %s", tempfilename, sqlite3_errstr(rc)); |
say("", "%s: %s", tempfilename, sqlite3_errstr(rc)); |
return(0); |
return 0; |
} |
} |
|
|
create_tables: |
create_tables: |
|
|
exitcode = (int)MANDOCLEVEL_SYSERR; |
exitcode = (int)MANDOCLEVEL_SYSERR; |
say(MANDOC_DB, "%s", sqlite3_errmsg(db)); |
say(MANDOC_DB, "%s", sqlite3_errmsg(db)); |
sqlite3_close(db); |
sqlite3_close(db); |
return(0); |
return 0; |
} |
} |
|
|
prepare_statements: |
prepare_statements: |
Line 2361 prepare_statements: |
|
Line 2354 prepare_statements: |
|
say(MANDOC_DB, "PRAGMA foreign_keys: %s", |
say(MANDOC_DB, "PRAGMA foreign_keys: %s", |
sqlite3_errmsg(db)); |
sqlite3_errmsg(db)); |
sqlite3_close(db); |
sqlite3_close(db); |
return(0); |
return 0; |
} |
} |
|
|
sql = "DELETE FROM mpages WHERE pageid IN " |
sql = "DELETE FROM mpages WHERE pageid IN " |
Line 2395 prepare_statements: |
|
Line 2388 prepare_statements: |
|
say(MANDOC_DB, "PRAGMA synchronous: %s", |
say(MANDOC_DB, "PRAGMA synchronous: %s", |
sqlite3_errmsg(db)); |
sqlite3_errmsg(db)); |
sqlite3_close(db); |
sqlite3_close(db); |
return(0); |
return 0; |
} |
} |
#endif |
#endif |
|
|
return(1); |
return 1; |
} |
} |
|
|
static void * |
static void * |
hash_calloc(size_t n, size_t sz, void *arg) |
hash_calloc(size_t n, size_t sz, void *arg) |
{ |
{ |
|
|
return(mandoc_calloc(n, sz)); |
return mandoc_calloc(n, sz); |
} |
} |
|
|
static void * |
static void * |
hash_alloc(size_t sz, void *arg) |
hash_alloc(size_t sz, void *arg) |
{ |
{ |
|
|
return(mandoc_malloc(sz)); |
return mandoc_malloc(sz); |
} |
} |
|
|
static void |
static void |
Line 2462 set_basedir(const char *targetdir, int report_baddir) |
|
Line 2455 set_basedir(const char *targetdir, int report_baddir) |
|
if (2 == getcwd_status) { |
if (2 == getcwd_status) { |
exitcode = (int)MANDOCLEVEL_SYSERR; |
exitcode = (int)MANDOCLEVEL_SYSERR; |
say("", "getcwd: %s", startdir); |
say("", "getcwd: %s", startdir); |
return(0); |
return 0; |
} |
} |
if (-1 == chdir(startdir)) { |
if (-1 == chdir(startdir)) { |
exitcode = (int)MANDOCLEVEL_SYSERR; |
exitcode = (int)MANDOCLEVEL_SYSERR; |
say("", "&chdir %s", startdir); |
say("", "&chdir %s", startdir); |
return(0); |
return 0; |
} |
} |
} |
} |
|
|
Line 2481 set_basedir(const char *targetdir, int report_baddir) |
|
Line 2474 set_basedir(const char *targetdir, int report_baddir) |
|
exitcode = (int)MANDOCLEVEL_BADARG; |
exitcode = (int)MANDOCLEVEL_BADARG; |
say("", "&%s: realpath", targetdir); |
say("", "&%s: realpath", targetdir); |
} |
} |
return(0); |
return 0; |
} else if (-1 == chdir(basedir)) { |
} else if (-1 == chdir(basedir)) { |
if (report_baddir || errno != ENOENT) { |
if (report_baddir || errno != ENOENT) { |
exitcode = (int)MANDOCLEVEL_BADARG; |
exitcode = (int)MANDOCLEVEL_BADARG; |
say("", "&chdir"); |
say("", "&chdir"); |
} |
} |
return(0); |
return 0; |
} |
} |
chdir_status = 1; |
chdir_status = 1; |
cp = strchr(basedir, '\0'); |
cp = strchr(basedir, '\0'); |
Line 2495 set_basedir(const char *targetdir, int report_baddir) |
|
Line 2488 set_basedir(const char *targetdir, int report_baddir) |
|
if (cp - basedir >= PATH_MAX - 1) { |
if (cp - basedir >= PATH_MAX - 1) { |
exitcode = (int)MANDOCLEVEL_SYSERR; |
exitcode = (int)MANDOCLEVEL_SYSERR; |
say("", "Filename too long"); |
say("", "Filename too long"); |
return(0); |
return 0; |
} |
} |
*cp++ = '/'; |
*cp++ = '/'; |
*cp = '\0'; |
*cp = '\0'; |
} |
} |
return(1); |
return 1; |
} |
} |
|
|
static void |
static void |