=================================================================== RCS file: /cvs/mandoc/mandocdb.c,v retrieving revision 1.192 retrieving revision 1.199 diff -u -p -r1.192 -r1.199 --- mandoc/mandocdb.c 2015/04/18 16:34:25 1.192 +++ mandoc/mandocdb.c 2015/10/12 00:08:15 1.199 @@ -1,4 +1,4 @@ -/* $Id: mandocdb.c,v 1.192 2015/04/18 16:34:25 schwarze Exp $ */ +/* $Id: mandocdb.c,v 1.199 2015/10/12 00:08:15 schwarze Exp $ */ /* * Copyright (c) 2011, 2012 Kristaps Dzonsons * Copyright (c) 2011-2015 Ingo Schwarze @@ -23,6 +23,7 @@ #include #include +#include #include #include #if HAVE_FTS @@ -189,8 +190,9 @@ static int set_basedir(const char *, int); static int treescan(void); static size_t utf8(unsigned int, char [7]); +extern char *__progname; + 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 */ @@ -357,12 +359,6 @@ mandocdb(int argc, char *argv[]) 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 +366,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 +402,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; @@ -436,8 +430,7 @@ mandocdb(int argc, char *argv[]) argv += optind; if (OP_CONFFILE == op && argc > 0) { - fprintf(stderr, "%s: -C: Too many arguments\n", - progname); + warnx("-C: Too many arguments"); goto usage; } @@ -547,17 +540,17 @@ out: mpages_free(); ohash_delete(&mpages); ohash_delete(&mlinks); - return(exitcode); + return exitcode; usage: 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; } /* @@ -594,7 +587,7 @@ treescan(void) if (NULL == f) { exitcode = (int)MANDOCLEVEL_SYSERR; say("", "&fts_open"); - return(0); + return 0; } dsec = arch = NULL; @@ -700,7 +693,6 @@ treescan(void) continue; case FTS_D: - /* FALLTHROUGH */ case FTS_DP: break; @@ -763,7 +755,7 @@ treescan(void) } fts_close(f); - return(1); + return 1; } /* @@ -1195,19 +1187,18 @@ mpages_merge(struct mparse *mp) goto nextpage; } else if (man != NULL && man->macroset == MACROSET_MDOC) { mpage->form = FORM_SRC; - mpage->sec = mdoc_meta(man)->msec; + mpage->sec = man->meta.msec; mpage->sec = mandoc_strdup( mpage->sec == NULL ? "" : mpage->sec); - mpage->arch = mdoc_meta(man)->arch; + mpage->arch = man->meta.arch; mpage->arch = mandoc_strdup( mpage->arch == NULL ? "" : mpage->arch); - mpage->title = - mandoc_strdup(mdoc_meta(man)->title); + mpage->title = mandoc_strdup(man->meta.title); } else if (man != NULL && man->macroset == MACROSET_MAN) { 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->title = mandoc_strdup(man_meta(man)->title); + mpage->title = mandoc_strdup(man->meta.title); } else { mpage->form = FORM_CAT; mpage->sec = mandoc_strdup(mlink->dsec); @@ -1230,9 +1221,9 @@ mpages_merge(struct mparse *mp) assert(mpage->desc == NULL); if (man != NULL && man->macroset == MACROSET_MDOC) - parse_mdoc(mpage, mdoc_meta(man), mdoc_node(man)); + parse_mdoc(mpage, &man->meta, man->first); else if (man != NULL) - parse_man(mpage, man_meta(man), man_node(man)); + parse_man(mpage, &man->meta, man->first); else parse_cat(mpage, fd); if (mpage->desc == NULL) @@ -1247,10 +1238,6 @@ mpages_merge(struct mparse *mp) mlink = mpage->mlinks; nextpage: - if (mparse_wait(mp) != MANDOCLEVEL_OK) { - exitcode = (int)MANDOCLEVEL_SYSERR; - say(mlink->file, "&wait gunzip"); - } ohash_delete(&strings); ohash_delete(&names); mpage = ohash_next(&mpages, &pslot); @@ -1477,7 +1464,7 @@ parse_man(struct mpage *mpage, const struct roff_meta */ title = NULL; - man_deroff(&title, body); + deroff(&title, body); if (NULL == title) return; @@ -1575,13 +1562,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)) @@ -1609,7 +1592,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 @@ -1617,10 +1600,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 @@ -1632,7 +1615,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) @@ -1640,7 +1623,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 @@ -1670,7 +1653,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); @@ -1678,7 +1661,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 @@ -1687,12 +1670,12 @@ 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 @@ -1702,17 +1685,17 @@ parse_mdoc_Xr(struct mpage *mpage, const struct roff_m 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 @@ -1721,8 +1704,8 @@ parse_mdoc_Nd(struct mpage *mpage, const struct roff_m { if (n->type == ROFFT_BODY) - mdoc_deroff(&mpage->desc, n); - return(0); + deroff(&mpage->desc, n); + return 0; } static int @@ -1744,7 +1727,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 @@ -1752,7 +1735,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 @@ -1760,7 +1743,7 @@ 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 @@ -1768,7 +1751,7 @@ parse_mdoc_body(struct mpage *mpage, const struct roff const struct roff_node *n) { - return(n->type == ROFFT_BODY); + return n->type == ROFFT_BODY; } /* @@ -1873,10 +1856,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; } /* @@ -1934,7 +1917,6 @@ render_string(char **public, size_t *psz) case '\\': break; case '\t': - /* FALLTHROUGH */ case ASCII_NBRSP: dst[dsz++] = ' '; scp++; @@ -2000,9 +1982,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 @@ -2213,7 +2195,7 @@ dbclose(int real) return; case 0: execlp("cmp", "cmp", "-s", - tempfilename, MANDOC_DB, NULL); + tempfilename, MANDOC_DB, (char *)NULL); say("", "&exec cmp"); exit(0); default: @@ -2238,7 +2220,7 @@ dbclose(int real) say("", "&fork rm"); return; case 0: - execlp("rm", "rm", "-rf", tempfilename, NULL); + execlp("rm", "rm", "-rf", tempfilename, (char *)NULL); say("", "&exec rm"); exit((int)MANDOCLEVEL_SYSERR); default: @@ -2269,7 +2251,7 @@ dbopen(int real) int rc, ofl; if (nodb) - return(1); + return 1; *tempfilename = '\0'; ofl = SQLITE_OPEN_READWRITE; @@ -2280,7 +2262,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; } @@ -2294,7 +2276,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", @@ -2302,7 +2284,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)); @@ -2310,7 +2292,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: @@ -2349,7 +2331,7 @@ create_tables: exitcode = (int)MANDOCLEVEL_SYSERR; say(MANDOC_DB, "%s", sqlite3_errmsg(db)); sqlite3_close(db); - return(0); + return 0; } prepare_statements: @@ -2359,7 +2341,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 " @@ -2393,25 +2375,25 @@ 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)); + return mandoc_calloc(n, sz); } static void * hash_alloc(size_t sz, void *arg) { - return(mandoc_malloc(sz)); + return mandoc_malloc(sz); } static void @@ -2460,12 +2442,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; } } @@ -2479,13 +2461,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'); @@ -2493,12 +2475,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