- const char *sql;
- int rc, ofl;
-
- if (nodb)
- return(1);
-
- *tempfilename = '\0';
- ofl = SQLITE_OPEN_READWRITE;
-
- if (real) {
- rc = sqlite3_open_v2(MANDOC_DB, &db, ofl, NULL);
- if (SQLITE_OK != rc) {
- exitcode = (int)MANDOCLEVEL_SYSERR;
- say(MANDOC_DB, "%s", sqlite3_errmsg(db));
- return(0);
- }
- goto prepare_statements;
- }
-
- ofl |= SQLITE_OPEN_CREATE | SQLITE_OPEN_EXCLUSIVE;
-
- remove(MANDOC_DB "~");
- rc = sqlite3_open_v2(MANDOC_DB "~", &db, ofl, NULL);
- if (SQLITE_OK == rc)
- goto create_tables;
- if (MPARSE_QUICK & mparse_options) {
- exitcode = (int)MANDOCLEVEL_SYSERR;
- say(MANDOC_DB "~", "%s", sqlite3_errmsg(db));
- return(0);
- }
-
- if (strlcpy(tempfilename, "/tmp/mandocdb.XXXXXX",
- sizeof(tempfilename)) >= sizeof(tempfilename)) {
- exitcode = (int)MANDOCLEVEL_SYSERR;
- say("", "/tmp/mandocdb.XXXXXX: Filename too long");
- return(0);
- }
- if (NULL == mkdtemp(tempfilename)) {
- exitcode = (int)MANDOCLEVEL_SYSERR;
- say("", "&%s", tempfilename);
- return(0);
- }
- if (strlcat(tempfilename, "/" MANDOC_DB,
- sizeof(tempfilename)) >= sizeof(tempfilename)) {
- exitcode = (int)MANDOCLEVEL_SYSERR;
- say("", "%s/" MANDOC_DB ": Filename too long",
- tempfilename);
- return(0);
- }
- rc = sqlite3_open_v2(tempfilename, &db, ofl, NULL);
- if (SQLITE_OK != rc) {
- exitcode = (int)MANDOCLEVEL_SYSERR;
- say("", "%s: %s", tempfilename, sqlite3_errmsg(db));
- return(0);
- }