=================================================================== RCS file: /cvs/mandoc/mandocdb.c,v retrieving revision 1.196 retrieving revision 1.218 diff -u -p -r1.196 -r1.218 --- mandoc/mandocdb.c 2015/09/16 09:50:29 1.196 +++ mandoc/mandocdb.c 2016/07/12 05:18:38 1.218 @@ -1,7 +1,7 @@ -/* $Id: mandocdb.c,v 1.196 2015/09/16 09:50:29 schwarze Exp $ */ +/* $Id: mandocdb.c,v 1.218 2016/07/12 05:18:38 kristaps Exp $ */ /* * Copyright (c) 2011, 2012 Kristaps Dzonsons - * Copyright (c) 2011-2015 Ingo Schwarze + * Copyright (c) 2011-2016 Ingo Schwarze * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -23,6 +23,9 @@ #include #include +#if HAVE_ERR +#include +#endif #include #include #if HAVE_FTS @@ -30,8 +33,10 @@ #else #include "compat_fts.h" #endif -#include #include +#if HAVE_SANDBOX_INIT +#include +#endif #include #include #include @@ -39,14 +44,10 @@ #include #include -#if HAVE_OHASH -#include -#else -#include "compat_ohash.h" -#endif #include #include "mandoc_aux.h" +#include "mandoc_ohash.h" #include "mandoc.h" #include "roff.h" #include "mdoc.h" @@ -145,9 +146,6 @@ static void dbadd_mlink_name(const struct mlink *mlin static int dbopen(int); static void dbprune(void); static void filescan(const char *); -static void *hash_alloc(size_t, void *); -static void hash_free(void *, void *); -static void *hash_calloc(size_t, size_t, void *); static void mlink_add(struct mlink *, const struct stat *); static void mlink_check(struct mpage *, struct mlink *); static void mlink_free(struct mlink *); @@ -160,8 +158,6 @@ static void parse_man(struct mpage *, const struct ro const struct roff_node *); static void parse_mdoc(struct mpage *, const struct roff_meta *, const struct roff_node *); -static int parse_mdoc_body(struct mpage *, const struct roff_meta *, - const struct roff_node *); static int parse_mdoc_head(struct mpage *, const struct roff_meta *, const struct roff_node *); static int parse_mdoc_Fd(struct mpage *, const struct roff_meta *, @@ -177,6 +173,8 @@ static int parse_mdoc_Nm(struct mpage *, const struct const struct roff_node *); static int parse_mdoc_Sh(struct mpage *, const struct roff_meta *, const struct roff_node *); +static int parse_mdoc_Va(struct mpage *, const struct roff_meta *, + const struct roff_node *); static int parse_mdoc_Xr(struct mpage *, const struct roff_meta *, const struct roff_node *); static void putkey(const struct mpage *, char *, uint64_t); @@ -190,7 +188,6 @@ static int treescan(void); static size_t utf8(unsigned int, char [7]); static char tempfilename[32]; -static char *progname; static int nodb; /* no database changes */ static int mparse_options; /* abort the parse early */ static int use_all; /* use all found files */ @@ -200,7 +197,6 @@ static int write_utf8; /* write UTF-8 output; else A static int exitcode; /* to be returned by main */ static enum op op; /* operational mode */ static char basedir[PATH_MAX]; /* current base directory */ -static struct mchars *mchars; /* table of named characters */ static struct ohash mpages; /* table of distinct manual pages */ static struct ohash mlinks; /* table of directory entries */ static struct ohash names; /* table of all names */ @@ -248,8 +244,8 @@ static const struct mdoc_handler mdocs[MDOC_MAX] = { { NULL, TYPE_Pa }, /* Pa */ { NULL, 0 }, /* Rv */ { NULL, TYPE_St }, /* St */ - { NULL, TYPE_Va }, /* Va */ - { parse_mdoc_body, TYPE_Va }, /* Vt */ + { parse_mdoc_Va, TYPE_Va }, /* Va */ + { parse_mdoc_Va, TYPE_Vt }, /* Vt */ { parse_mdoc_Xr, 0 }, /* Xr */ { NULL, 0 }, /* %A */ { NULL, 0 }, /* %B */ @@ -340,29 +336,28 @@ int mandocdb(int argc, char *argv[]) { struct manconf conf; - struct ohash_info mpages_info, mlinks_info; struct mparse *mp; - const char *path_arg; + const char *path_arg, *progname; size_t j, sz; int ch, i; +#if HAVE_PLEDGE + if (pledge("stdio rpath wpath cpath fattr flock proc exec", NULL) == -1) { + warn("pledge"); + return (int)MANDOCLEVEL_SYSERR; + } +#endif + +#if HAVE_SANDBOX_INIT + if (sandbox_init(kSBXProfileNoInternet, SANDBOX_NAMED, NULL) == -1) { + warnx("sandbox_init"); + return (int)MANDOCLEVEL_SYSERR; + } +#endif + memset(&conf, 0, sizeof(conf)); memset(stmts, 0, STMT__MAX * sizeof(sqlite3_stmt *)); - mpages_info.alloc = mlinks_info.alloc = hash_alloc; - mpages_info.calloc = mlinks_info.calloc = hash_calloc; - mpages_info.free = mlinks_info.free = hash_free; - mpages_info.data = mlinks_info.data = NULL; - - mpages_info.key_offset = offsetof(struct mpage, inodev); - mlinks_info.key_offset = offsetof(struct mlink, file); - - progname = strrchr(argv[0], '/'); - if (progname == NULL) - progname = argv[0]; - else - ++progname; - /* * We accept a few different invocations. * The CHECKOP macro makes sure that invocation styles don't @@ -370,8 +365,7 @@ mandocdb(int argc, char *argv[]) */ #define CHECKOP(_op, _ch) do \ if (OP_DEFAULT != (_op)) { \ - fprintf(stderr, "%s: -%c: Conflicting option\n", \ - progname, (_ch)); \ + warnx("-%c: Conflicting option", (_ch)); \ goto usage; \ } while (/*CONSTCOND*/0) @@ -407,9 +401,8 @@ mandocdb(int argc, char *argv[]) break; case 'T': if (strcmp(optarg, "utf8")) { - fprintf(stderr, "%s: -T%s: " - "Unsupported output format\n", - progname, optarg); + warnx("-T%s: Unsupported output format", + optarg); goto usage; } write_utf8 = 1; @@ -435,18 +428,25 @@ mandocdb(int argc, char *argv[]) argc -= optind; argv += optind; +#if HAVE_PLEDGE + if (nodb) { + if (pledge("stdio rpath", NULL) == -1) { + warn("pledge"); + return (int)MANDOCLEVEL_SYSERR; + } + } +#endif + if (OP_CONFFILE == op && argc > 0) { - fprintf(stderr, "%s: -C: Too many arguments\n", - progname); + warnx("-C: Too many arguments"); goto usage; } exitcode = (int)MANDOCLEVEL_OK; - mchars = mchars_alloc(); - mp = mparse_alloc(mparse_options, MANDOCLEVEL_BADARG, NULL, - mchars, NULL); - ohash_init(&mpages, 6, &mpages_info); - ohash_init(&mlinks, 6, &mlinks_info); + mchars_alloc(); + mp = mparse_alloc(mparse_options, MANDOCLEVEL_BADARG, NULL, NULL); + mandoc_ohash_init(&mpages, 6, offsetof(struct mpage, inodev)); + mandoc_ohash_init(&mlinks, 6, offsetof(struct mlink, file)); if (OP_UPDATE == op || OP_DELETE == op || OP_TEST == op) { @@ -462,6 +462,15 @@ mandocdb(int argc, char *argv[]) * The existing database is usable. Process * all files specified on the command-line. */ +#if HAVE_PLEDGE + if (!nodb) { + if (pledge("stdio rpath wpath cpath fattr flock", NULL) == -1) { + warn("pledge"); + exitcode = (int)MANDOCLEVEL_SYSERR; + goto out; + } + } +#endif use_all = 1; for (i = 0; i < argc; i++) filescan(argv[i]); @@ -516,8 +525,10 @@ mandocdb(int argc, char *argv[]) continue; if (j) { - ohash_init(&mpages, 6, &mpages_info); - ohash_init(&mlinks, 6, &mlinks_info); + mandoc_ohash_init(&mpages, 6, + offsetof(struct mpage, inodev)); + mandoc_ohash_init(&mlinks, 6, + offsetof(struct mlink, file)); } if ( ! set_basedir(conf.manpath.paths[j], argc > 0)) @@ -543,21 +554,21 @@ mandocdb(int argc, char *argv[]) out: manconf_free(&conf); mparse_free(mp); - mchars_free(mchars); + mchars_free(); mpages_free(); ohash_delete(&mpages); ohash_delete(&mlinks); - return(exitcode); + return exitcode; usage: + progname = getprogname(); fprintf(stderr, "usage: %s [-aDnpQ] [-C file] [-Tutf8]\n" " %s [-aDnpQ] [-Tutf8] dir ...\n" " %s [-DnpQ] [-Tutf8] -d dir [file ...]\n" " %s [-Dnp] -u dir [file ...]\n" " %s [-Q] -t file ...\n", - progname, progname, progname, - progname, progname); + progname, progname, progname, progname, progname); - return((int)MANDOCLEVEL_BADARG); + return (int)MANDOCLEVEL_BADARG; } /* @@ -572,7 +583,7 @@ usage: * or * [./]cat
[/]/.0 * - * TODO: accomodate for multi-language directories. + * TODO: accommodate for multi-language directories. */ static int treescan(void) @@ -591,16 +602,16 @@ treescan(void) f = fts_open((char * const *)argv, FTS_PHYSICAL | FTS_NOCHDIR, NULL); - if (NULL == f) { + if (f == NULL) { exitcode = (int)MANDOCLEVEL_SYSERR; say("", "&fts_open"); - return(0); + return 0; } dsec = arch = NULL; dform = FORM_NONE; - while (NULL != (ff = fts_read(f))) { + while ((ff = fts_read(f)) != NULL) { path = ff->fts_path + 2; switch (ff->fts_info) { @@ -609,7 +620,7 @@ treescan(void) * then get handled just like regular files. */ case FTS_SL: - if (NULL == realpath(path, buf)) { + if (realpath(path, buf) == NULL) { if (warnings) say(path, "&realpath"); continue; @@ -624,7 +635,7 @@ treescan(void) continue; } /* Use logical inode to avoid mpages dupe. */ - if (-1 == stat(path, ff->fts_statp)) { + if (stat(path, ff->fts_statp) == -1) { if (warnings) say(path, "&stat"); continue; @@ -636,7 +647,7 @@ treescan(void) * stored directory data and handling the filename. */ case FTS_F: - if (0 == strcmp(path, MANDOC_DB)) + if ( ! strcmp(path, MANDOC_DB)) continue; if ( ! use_all && ff->fts_level < 2) { if (warnings) @@ -645,37 +656,37 @@ treescan(void) } gzip = 0; fsec = NULL; - while (NULL == fsec) { + while (fsec == NULL) { fsec = strrchr(ff->fts_name, '.'); - if (NULL == fsec || strcmp(fsec+1, "gz")) + if (fsec == NULL || strcmp(fsec+1, "gz")) break; gzip = 1; *fsec = '\0'; fsec = NULL; } - if (NULL == fsec) { + if (fsec == NULL) { if ( ! use_all) { if (warnings) say(path, "No filename suffix"); continue; } - } else if (0 == strcmp(++fsec, "html")) { + } else if ( ! strcmp(++fsec, "html")) { if (warnings) say(path, "Skip html"); continue; - } else if (0 == strcmp(fsec, "ps")) { + } else if ( ! strcmp(fsec, "ps")) { if (warnings) say(path, "Skip ps"); continue; - } else if (0 == strcmp(fsec, "pdf")) { + } else if ( ! strcmp(fsec, "pdf")) { if (warnings) say(path, "Skip pdf"); continue; } else if ( ! use_all && - ((FORM_SRC == dform && + ((dform == FORM_SRC && strncmp(fsec, dsec, strlen(dsec))) || - (FORM_CAT == dform && strcmp(fsec, "0")))) { + (dform == FORM_CAT && strcmp(fsec, "0")))) { if (warnings) say(path, "Wrong filename suffix"); continue; @@ -700,7 +711,6 @@ treescan(void) continue; case FTS_D: - /* FALLTHROUGH */ case FTS_DP: break; @@ -721,13 +731,16 @@ treescan(void) * If we're not in use_all, enforce it. */ cp = ff->fts_name; - if (FTS_DP == ff->fts_info) + if (ff->fts_info == FTS_DP) { + dform = FORM_NONE; + dsec = NULL; break; + } - if (0 == strncmp(cp, "man", 3)) { + if ( ! strncmp(cp, "man", 3)) { dform = FORM_SRC; dsec = cp + 3; - } else if (0 == strncmp(cp, "cat", 3)) { + } else if ( ! strncmp(cp, "cat", 3)) { dform = FORM_CAT; dsec = cp + 3; } else { @@ -735,7 +748,7 @@ treescan(void) dsec = NULL; } - if (NULL != dsec || use_all) + if (dsec != NULL || use_all) break; if (warnings) @@ -747,13 +760,13 @@ treescan(void) * Possibly our architecture. * If we're descending, keep tabs on it. */ - if (FTS_DP != ff->fts_info && NULL != dsec) + if (ff->fts_info != FTS_DP && dsec != NULL) arch = ff->fts_name; else arch = NULL; break; default: - if (FTS_DP == ff->fts_info || use_all) + if (ff->fts_info == FTS_DP || use_all) break; if (warnings) say(path, "Extraneous directory part"); @@ -763,7 +776,7 @@ treescan(void) } fts_close(f); - return(1); + return 1; } /* @@ -1104,7 +1117,6 @@ static void mpages_merge(struct mparse *mp) { char any[] = "any"; - struct ohash_info str_info; struct mpage *mpage, *mpage_dest; struct mlink *mlink, *mlink_dest; struct roff_man *man; @@ -1113,12 +1125,6 @@ mpages_merge(struct mparse *mp) int fd; unsigned int pslot; - str_info.alloc = hash_alloc; - str_info.calloc = hash_calloc; - str_info.free = hash_free; - str_info.data = NULL; - str_info.key_offset = offsetof(struct str, key); - if ( ! nodb) SQL_EXEC("BEGIN TRANSACTION"); @@ -1131,14 +1137,13 @@ mpages_merge(struct mparse *mp) } name_mask = NAME_MASK; - ohash_init(&names, 4, &str_info); - ohash_init(&strings, 6, &str_info); + mandoc_ohash_init(&names, 4, offsetof(struct str, key)); + mandoc_ohash_init(&strings, 6, offsetof(struct str, key)); mparse_reset(mp); man = NULL; sodest = NULL; - mparse_open(mp, &fd, mlink->file); - if (fd == -1) { + if ((fd = mparse_open(mp, mlink->file)) == -1) { say(mlink->file, "&open"); goto nextpage; } @@ -1149,6 +1154,7 @@ mpages_merge(struct mparse *mp) */ if (mlink->dform != FORM_CAT || mlink->fform != FORM_CAT) { mparse_readfd(mp, fd, mlink->file); + close(fd); mparse_result(mp, &man, &sodest); } @@ -1194,6 +1200,7 @@ mpages_merge(struct mparse *mp) } goto nextpage; } else if (man != NULL && man->macroset == MACROSET_MDOC) { + mdoc_validate(man); mpage->form = FORM_SRC; mpage->sec = man->meta.msec; mpage->sec = mandoc_strdup( @@ -1203,6 +1210,7 @@ mpages_merge(struct mparse *mp) mpage->arch == NULL ? "" : mpage->arch); mpage->title = mandoc_strdup(man->meta.title); } else if (man != NULL && man->macroset == MACROSET_MAN) { + man_validate(man); mpage->form = FORM_SRC; mpage->sec = mandoc_strdup(man->meta.msec); mpage->arch = mandoc_strdup(mlink->arch); @@ -1260,7 +1268,6 @@ names_check(void) { sqlite3_stmt *stmt; const char *name, *sec, *arch, *key; - int irc; sqlite3_prepare_v2(db, "SELECT name, sec, arch, key FROM (" @@ -1276,10 +1283,10 @@ names_check(void) ") USING (pageid);", -1, &stmt, NULL); - if (SQLITE_OK != sqlite3_bind_int64(stmt, 1, NAME_TITLE)) + if (sqlite3_bind_int64(stmt, 1, NAME_TITLE) != SQLITE_OK) say("", "%s", sqlite3_errmsg(db)); - while (SQLITE_ROW == (irc = sqlite3_step(stmt))) { + while (sqlite3_step(stmt) == SQLITE_ROW) { name = (const char *)sqlite3_column_text(stmt, 0); sec = (const char *)sqlite3_column_text(stmt, 1); arch = (const char *)sqlite3_column_text(stmt, 2); @@ -1296,7 +1303,9 @@ parse_cat(struct mpage *mpage, int fd) { FILE *stream; char *line, *p, *title; - size_t len, plen, titlesz; + size_t linesz, plen, titlesz; + ssize_t len; + int offs; stream = (-1 == fd) ? fopen(mpage->mlinks->file, "r") : @@ -1309,10 +1318,13 @@ parse_cat(struct mpage *mpage, int fd) return; } + line = NULL; + linesz = 0; + /* Skip to first blank line. */ - while (NULL != (line = fgetln(stream, &len))) - if ('\n' == *line) + while (getline(&line, &linesz, stream) != -1) + if (*line == '\n') break; /* @@ -1320,8 +1332,8 @@ parse_cat(struct mpage *mpage, int fd) * is the first section header. Skip to it. */ - while (NULL != (line = fgetln(stream, &len))) - if ('\n' != *line && ' ' != *line) + while (getline(&line, &linesz, stream) != -1) + if (*line != '\n' && *line != ' ') break; /* @@ -1334,20 +1346,20 @@ parse_cat(struct mpage *mpage, int fd) titlesz = 0; title = NULL; - while (NULL != (line = fgetln(stream, &len))) { - if (' ' != *line || '\n' != line[len - 1]) + while ((len = getline(&line, &linesz, stream)) != -1) { + if (*line != ' ') break; - while (len > 0 && isspace((unsigned char)*line)) { - line++; - len--; - } - if (1 == len) + offs = 0; + while (isspace((unsigned char)line[offs])) + offs++; + if (line[offs] == '\0') continue; - title = mandoc_realloc(title, titlesz + len); - memcpy(title + titlesz, line, len); - titlesz += len; + title = mandoc_realloc(title, titlesz + len - offs); + memcpy(title + titlesz, line + offs, len - offs); + titlesz += len - offs; title[titlesz - 1] = ' '; } + free(line); /* * If no page content can be found, or the input line @@ -1365,8 +1377,7 @@ parse_cat(struct mpage *mpage, int fd) return; } - title = mandoc_realloc(title, titlesz + 1); - title[titlesz] = '\0'; + title[titlesz - 1] = '\0'; /* * Skip to the first dash. @@ -1444,7 +1455,7 @@ parse_man(struct mpage *mpage, const struct roff_meta char byte; size_t sz; - if (NULL == n) + if (n == NULL) return; /* @@ -1456,13 +1467,12 @@ parse_man(struct mpage *mpage, const struct roff_meta if (n->type == ROFFT_BODY && n->tok == MAN_SH) { body = n; - assert(body->parent); - if (NULL != (head = body->parent->head) && - 1 == head->nchild && - NULL != (head = (head->child)) && + if ((head = body->parent->head) != NULL && + (head = head->child) != NULL && + head->next == NULL && head->type == ROFFT_TEXT && - 0 == strcmp(head->string, "NAME") && - NULL != body->child) { + strcmp(head->string, "NAME") == 0 && + body->child != NULL) { /* * Suck the entire NAME section into memory. @@ -1570,13 +1580,9 @@ parse_mdoc(struct mpage *mpage, const struct roff_meta for (n = n->child; NULL != n; n = n->next) { switch (n->type) { case ROFFT_ELEM: - /* FALLTHROUGH */ case ROFFT_BLOCK: - /* FALLTHROUGH */ case ROFFT_HEAD: - /* FALLTHROUGH */ case ROFFT_BODY: - /* FALLTHROUGH */ case ROFFT_TAIL: if (NULL != mdocs[n->tok].fp) if (0 == (*mdocs[n->tok].fp)(mpage, meta, n)) @@ -1604,7 +1610,7 @@ parse_mdoc_Fd(struct mpage *mpage, const struct roff_m if (SEC_SYNOPSIS != n->sec || NULL == (n = n->child) || n->type != ROFFT_TEXT) - return(0); + return 0; /* * Only consider those `Fd' macro fields that begin with an @@ -1612,10 +1618,10 @@ parse_mdoc_Fd(struct mpage *mpage, const struct roff_m */ if (strcmp("#include", n->string)) - return(0); + return 0; if ((n = n->next) == NULL || n->type != ROFFT_TEXT) - return(0); + return 0; /* * Strip away the enclosing angle brackets and make sure we're @@ -1627,7 +1633,7 @@ parse_mdoc_Fd(struct mpage *mpage, const struct roff_m start++; if (0 == (sz = strlen(start))) - return(0); + return 0; end = &start[(int)sz - 1]; if ('>' == *end || '"' == *end) @@ -1635,7 +1641,7 @@ parse_mdoc_Fd(struct mpage *mpage, const struct roff_m if (end > start) putkeys(mpage, start, end - start + 1, TYPE_In); - return(0); + return 0; } static void @@ -1665,7 +1671,7 @@ parse_mdoc_Fn(struct mpage *mpage, const struct roff_m { if (n->child == NULL) - return(0); + return 0; parse_mdoc_fname(mpage, n->child); @@ -1673,7 +1679,7 @@ parse_mdoc_Fn(struct mpage *mpage, const struct roff_m if (n->type == ROFFT_TEXT) putkey(mpage, n->string, TYPE_Fa); - return(0); + return 0; } static int @@ -1682,32 +1688,57 @@ parse_mdoc_Fo(struct mpage *mpage, const struct roff_m { if (n->type != ROFFT_HEAD) - return(1); + return 1; if (n->child != NULL) parse_mdoc_fname(mpage, n->child); - return(0); + return 0; } static int +parse_mdoc_Va(struct mpage *mpage, const struct roff_meta *meta, + const struct roff_node *n) +{ + char *cp; + + if (n->type != ROFFT_ELEM && n->type != ROFFT_BODY) + return 0; + + if (n->child != NULL && + n->child->next == NULL && + n->child->type == ROFFT_TEXT) + return 1; + + cp = NULL; + deroff(&cp, n); + if (cp != NULL) { + putkey(mpage, cp, TYPE_Vt | (n->tok == MDOC_Va || + n->type == ROFFT_BODY ? TYPE_Va : 0)); + free(cp); + } + + return 0; +} + +static int parse_mdoc_Xr(struct mpage *mpage, const struct roff_meta *meta, const struct roff_node *n) { char *cp; if (NULL == (n = n->child)) - return(0); + return 0; if (NULL == n->next) { putkey(mpage, n->string, TYPE_Xr); - return(0); + return 0; } mandoc_asprintf(&cp, "%s(%s)", n->string, n->next->string); putkey(mpage, cp, TYPE_Xr); free(cp); - return(0); + return 0; } static int @@ -1717,7 +1748,7 @@ parse_mdoc_Nd(struct mpage *mpage, const struct roff_m if (n->type == ROFFT_BODY) deroff(&mpage->desc, n); - return(0); + return 0; } static int @@ -1739,7 +1770,7 @@ parse_mdoc_Nm(struct mpage *mpage, const struct roff_m putkey(mpage, n->child->string, ROFFT_HEAD); mpage->name_head_done = 1; } - return(0); + return 0; } static int @@ -1747,7 +1778,7 @@ parse_mdoc_Sh(struct mpage *mpage, const struct roff_m 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 @@ -1755,17 +1786,9 @@ parse_mdoc_head(struct mpage *mpage, const struct roff const struct roff_node *n) { - return(n->type == ROFFT_HEAD); + return n->type == ROFFT_HEAD; } -static int -parse_mdoc_body(struct mpage *mpage, const struct roff_meta *meta, - const struct roff_node *n) -{ - - return(n->type == ROFFT_BODY); -} - /* * Add a string to the hash table for the current manual. * Each string has a bitmask telling which macros it belongs to. @@ -1868,10 +1891,10 @@ utf8(unsigned int cp, char out[7]) out[4] = (cp >> 6 & 63) | 128; out[5] = (cp & 63) | 128; } else - return(0); + return 0; out[rc] = '\0'; - return(rc); + return rc; } /* @@ -1929,7 +1952,6 @@ render_string(char **public, size_t *psz) case '\\': break; case '\t': - /* FALLTHROUGH */ case ASCII_NBRSP: dst[dsz++] = ' '; scp++; @@ -1960,7 +1982,7 @@ render_string(char **public, size_t *psz) */ if (write_utf8) { - unicode = mchars_spec2cp(mchars, seq, seqlen); + unicode = mchars_spec2cp(seq, seqlen); if (unicode <= 0) continue; addsz = utf8(unicode, utfbuf); @@ -1968,7 +1990,7 @@ render_string(char **public, size_t *psz) continue; addcp = utfbuf; } else { - addcp = mchars_spec2str(mchars, seq, seqlen, &addsz); + addcp = mchars_spec2str(seq, seqlen, &addsz); if (addcp == NULL) continue; if (*addcp == ASCII_NBRSP) { @@ -1995,9 +2017,9 @@ render_string(char **public, size_t *psz) --*psz; if (dst != NULL) { (*public)[*psz] = '\0'; - return(1); + return 1; } else - return(0); + return 0; } static void @@ -2264,7 +2286,7 @@ dbopen(int real) int rc, ofl; if (nodb) - return(1); + return 1; *tempfilename = '\0'; ofl = SQLITE_OPEN_READWRITE; @@ -2275,7 +2297,7 @@ dbopen(int real) exitcode = (int)MANDOCLEVEL_SYSERR; if (SQLITE_CANTOPEN != rc) say(MANDOC_DB, "%s", sqlite3_errstr(rc)); - return(0); + return 0; } goto prepare_statements; } @@ -2289,7 +2311,7 @@ dbopen(int real) if (MPARSE_QUICK & mparse_options) { exitcode = (int)MANDOCLEVEL_SYSERR; say(MANDOC_DB "~", "%s", sqlite3_errstr(rc)); - return(0); + return 0; } (void)strlcpy(tempfilename, "/tmp/mandocdb.XXXXXX", @@ -2297,7 +2319,7 @@ dbopen(int real) if (NULL == mkdtemp(tempfilename)) { exitcode = (int)MANDOCLEVEL_SYSERR; say("", "&%s", tempfilename); - return(0); + return 0; } (void)strlcat(tempfilename, "/" MANDOC_DB, sizeof(tempfilename)); @@ -2305,7 +2327,7 @@ dbopen(int real) if (SQLITE_OK != rc) { exitcode = (int)MANDOCLEVEL_SYSERR; say("", "%s: %s", tempfilename, sqlite3_errstr(rc)); - return(0); + return 0; } create_tables: @@ -2344,7 +2366,7 @@ create_tables: exitcode = (int)MANDOCLEVEL_SYSERR; say(MANDOC_DB, "%s", sqlite3_errmsg(db)); sqlite3_close(db); - return(0); + return 0; } prepare_statements: @@ -2354,7 +2376,7 @@ prepare_statements: say(MANDOC_DB, "PRAGMA foreign_keys: %s", sqlite3_errmsg(db)); sqlite3_close(db); - return(0); + return 0; } sql = "DELETE FROM mpages WHERE pageid IN " @@ -2388,34 +2410,13 @@ prepare_statements: say(MANDOC_DB, "PRAGMA synchronous: %s", sqlite3_errmsg(db)); sqlite3_close(db); - return(0); + return 0; } #endif - return(1); + return 1; } -static void * -hash_calloc(size_t n, size_t sz, void *arg) -{ - - return(mandoc_calloc(n, sz)); -} - -static void * -hash_alloc(size_t sz, void *arg) -{ - - return(mandoc_malloc(sz)); -} - -static void -hash_free(void *p, void *arg) -{ - - free(p); -} - static int set_basedir(const char *targetdir, int report_baddir) { @@ -2455,12 +2456,12 @@ set_basedir(const char *targetdir, int report_baddir) if (2 == getcwd_status) { exitcode = (int)MANDOCLEVEL_SYSERR; say("", "getcwd: %s", startdir); - return(0); + return 0; } if (-1 == chdir(startdir)) { exitcode = (int)MANDOCLEVEL_SYSERR; say("", "&chdir %s", startdir); - return(0); + return 0; } } @@ -2474,13 +2475,13 @@ set_basedir(const char *targetdir, int report_baddir) exitcode = (int)MANDOCLEVEL_BADARG; say("", "&%s: realpath", targetdir); } - return(0); + return 0; } else if (-1 == chdir(basedir)) { if (report_baddir || errno != ENOENT) { exitcode = (int)MANDOCLEVEL_BADARG; say("", "&chdir"); } - return(0); + return 0; } chdir_status = 1; cp = strchr(basedir, '\0'); @@ -2488,12 +2489,12 @@ set_basedir(const char *targetdir, int report_baddir) if (cp - basedir >= PATH_MAX - 1) { exitcode = (int)MANDOCLEVEL_SYSERR; say("", "Filename too long"); - return(0); + return 0; } *cp++ = '/'; *cp = '\0'; } - return(1); + return 1; } static void