- gdbms[CDB_MSGMAIN] = gdbm_open("data/msgmain.gdbm", 8192,
- GDBM_WRCREAT, 0600, NULL);
- if (gdbms[CDB_MSGMAIN] == NULL) {
- lprintf(2, "Cannot open msgmain: %s\n",
- gdbm_strerror(gdbm_errno));
- exit(1);
- }
- gdbms[CDB_USERSUPP] = gdbm_open("data/usersupp.gdbm", 0,
- GDBM_WRCREAT, 0600, NULL);
- if (gdbms[CDB_USERSUPP] == NULL) {
- lprintf(2, "Cannot open usersupp: %s\n",
- gdbm_strerror(gdbm_errno));
- exit(1);
- }
- gdbms[CDB_VISIT] = gdbm_open("data/visit.gdbm", 0,
- GDBM_WRCREAT, 0600, NULL);
- if (gdbms[CDB_VISIT] == NULL) {
- lprintf(2, "Cannot open visit file: %s\n",
- gdbm_strerror(gdbm_errno));
- exit(1);
- }
- gdbms[CDB_QUICKROOM] = gdbm_open("data/quickroom.gdbm", 0,
- GDBM_WRCREAT, 0600, NULL);
- if (gdbms[CDB_QUICKROOM] == NULL) {
- lprintf(2, "Cannot open quickroom: %s\n",
- gdbm_strerror(gdbm_errno));
- exit(1);
- }
- gdbms[CDB_FLOORTAB] = gdbm_open("data/floortab.gdbm", 0,
- GDBM_WRCREAT, 0600, NULL);
- if (gdbms[CDB_FLOORTAB] == NULL) {
- lprintf(2, "Cannot open floortab: %s\n",
- gdbm_strerror(gdbm_errno));
- exit(1);
- }
- gdbms[CDB_MSGLISTS] = gdbm_open("data/msglists.gdbm", 0,
- GDBM_WRCREAT, 0600, NULL);
- if (gdbms[CDB_MSGLISTS] == NULL) {
- lprintf(2, "Cannot open msglists: %s\n",
- gdbm_strerror(gdbm_errno));
- exit(1);
- }
- gdbms[CDB_DIRECTORY] = gdbm_open("data/directory.gdbm", 0,
- GDBM_WRCREAT, 0600, NULL);
- if (gdbms[CDB_DIRECTORY] == NULL) {
- lprintf(2, "Cannot open directory: %s\n",
- gdbm_strerror(gdbm_errno));
- exit(1);
+ /* Arbitrary names for our tables -- we reference them by
+ * number, so we don't have string names for them.
+ */
+ snprintf(dbfilename, sizeof dbfilename, "cdb.%02x", i);
+
+ ret = dbp[i]->open(dbp[i],
+ NULL,
+ dbfilename,
+ NULL,
+ DB_BTREE,
+ DB_CREATE | DB_AUTO_COMMIT | DB_THREAD,
+ 0600
+ );
+ if (ret) {
+ CtdlLogPrintf(CTDL_EMERG, "db_open[%02x]: %s\n", i, db_strerror(ret));
+ if (ret == ENOMEM) {
+ CtdlLogPrintf(CTDL_EMERG, "You may need to tune your database; please read http://www.citadel.org/doku.php/faq:troubleshooting:out_of_lock_entries for more information.\n");
+ }
+ CtdlLogPrintf(CTDL_EMERG, "exit code %d\n", ret);
+ exit(CTDLEXIT_DB);
+ }