- 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);
- }
- gdbms[CDB_USETABLE] = gdbm_open("data/usetable.gdbm", 0,
- GDBM_WRCREAT, 0600, NULL);
- if (gdbms[CDB_USETABLE] == NULL) {
- lprintf(2, "Cannot open use table: %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) {
+ syslog(LOG_ERR, "db: db_open[%02x]: %s", i, db_strerror(ret));
+ if (ret == ENOMEM) {
+ syslog(LOG_ERR,
+ "db: You may need to tune your database; please read http://www.citadel.org/doku.php?id=faq:troubleshooting:out_of_lock_entries for more information.");
+ }
+ syslog(LOG_ERR, "db: exit code %d", ret);
+ exit(CTDLEXIT_DB);
+ }