*
* Copyright 2002 Project Purple
*
- * $Id: keydb_db3.c,v 1.21 2003/10/03 23:02:04 noodles Exp $
+ * $Id: keydb_db3.c,v 1.25 2004/05/26 17:46:21 noodles Exp $
*/
#include <assert.h>
* this file are called in order to allow the DB to be initialized ready
* for access.
*/
-void initdb(void)
+void initdb(bool readonly)
{
- char buf[1024];
- FILE *numdb = NULL;
- int ret = 0;
- int i = 0;
+ char buf[1024];
+ FILE *numdb = NULL;
+ int ret = 0;
+ int i = 0;
+ u_int32_t flags = 0;
snprintf(buf, sizeof(buf) - 1, "%s/num_keydb", config.db_dir);
numdb = fopen(buf, "r");
numdbs = atoi(buf);
}
fclose(numdb);
- } else {
+ } else if (!readonly) {
logthing(LOGTHING_ERROR, "Couldn't open num_keydb: %s",
strerror(errno));
+ numdb = fopen(buf, "w");
+ if (numdb != NULL) {
+ fprintf(numdb, "%d", numdbs);
+ fclose(numdb);
+ } else {
+ logthing(LOGTHING_ERROR,
+ "Couldn't write num_keydb: %s",
+ strerror(errno));
+ }
}
dbconns = malloc(sizeof (DB *) * numdbs);
}
snprintf(buf, 1023, "keydb.%d.db", i);
+ flags = DB_CREATE;
+ if (readonly) {
+ flags = DB_RDONLY;
+ }
ret = dbconns[i]->open(dbconns[i], buf,
NULL,
DB_HASH,
- DB_CREATE,
+ flags,
0664);
if (ret != 0) {
logthing(LOGTHING_CRITICAL,
ret = worddb->set_flags(worddb, DB_DUP);
ret = worddb->open(worddb, "worddb", NULL, DB_BTREE,
- DB_CREATE,
+ flags,
0664);
if (ret != 0) {
logthing(LOGTHING_CRITICAL,