AC_C_BIGENDIAN
-AC_ARG_ENABLE(backend,AC_HELP_STRING([--enable-backend=<backend>],[Choose the backend database to use. Defaults to db3.]), [], [enable_backend="db3"])
+AC_ARG_ENABLE(backend,AC_HELP_STRING([--enable-backend=<backend>],[Choose the backend database to use. Defaults to db4.]), [], [enable_backend="db4"])
AC_MSG_CHECKING([which key database backend to use])
AC_MSG_RESULT([$enable_backend])
AC_CHECK_FILE([$srcdir/keydb_$enable_backend.c], ,AC_MSG_ERROR([non existent key database backend $enable_backend]))
-if test "x$enable_backend" = "xdb3"
+if test "x$enable_backend" = "xdb4"
then
- AC_CHECK_LIB(db3, db_env_create,,
- AC_MSG_ERROR([cannot compile DB3 backend without libdb3]))
+ AC_CHECK_HEADER(db.h, have_db_h="yes", have_db_h="no")
+ AC_MSG_CHECKING(for libdb version in db.h)
+ printf "#include <db.h>\nDB_VERSION_MAJOR DB_VERSION_MINOR\n" >conftest.c
+ set `eval $ac_cpp conftest.c | egrep '^ *[[0-9]] *'`; v="$1"; vv="$2"
+ AC_MSG_RESULT($v.$vv)
+ if test "$v" -ne 4; then
+ AC_MSG_RESULT([ * onak requires libdb version 4])
+ fi
+ for db in "db-$v.$vv" "db$v.$vv" "db-$v" "db$v" "db"; do
+ AC_MSG_CHECKING(for db_create in lib$db)
+ oldLIBS="$LIBS"
+ LIBS="$LIBS -l$db"
+ AC_TRY_LINK([#include <db.h>], db_create(0, 0, 0),
+ have_libdb="yes", have_libdb="no")
+ AC_MSG_RESULT($have_libdb)
+ if test "$have_libdb" != "no"; then break; fi
+ LIBS="$oldLIBS"
+ done
+ if test "$have_libdb" = "no" -o "$have_db_h" = "no"; then
+ AC_MSG_ERROR(libdb not found.)
+ fi
+ AC_DEFINE(HAVE_LIBDB, 1, [libdb found])
else if test "x$enable_backend" = "xpg"
then
AC_CHECK_LIB(pq, PQsetdbLogin,,
/*
- * keydb_db3.c - Routines to store and fetch keys in a DB3 database.
+ * keydb_db4.c - Routines to store and fetch keys in a DB3 database.
*
* Jonathan McDowell <noodles@earth.li>
*
- * Copyright 2002 Project Purple
+ * Copyright 2002-2004 Project Purple
*/
#include <assert.h>
exit(1);
}
+ starttrans();
+
for (i = 0; i < numdbs; i++) {
ret = db_create(&dbconns[i], dbenv, 0);
if (ret != 0) {
if (readonly) {
flags = DB_RDONLY;
}
- ret = dbconns[i]->open(dbconns[i], buf,
- NULL,
- DB_HASH,
- flags,
- 0664);
+ ret = dbconns[i]->open(dbconns[i],
+ txn,
+ buf,
+ "keydb",
+ DB_HASH,
+ flags,
+ 0664);
if (ret != 0) {
logthing(LOGTHING_CRITICAL,
"Error opening key database: %s (%s)",
}
ret = worddb->set_flags(worddb, DB_DUP);
- ret = worddb->open(worddb, "worddb", NULL, DB_BTREE,
+ ret = worddb->open(worddb, txn, "worddb", "worddb", DB_BTREE,
flags,
0664);
if (ret != 0) {
}
ret = id32db->set_flags(id32db, DB_DUP);
- ret = id32db->open(id32db, "id32db", NULL, DB_HASH,
+ ret = id32db->open(id32db, txn, "id32db", "id32db", DB_HASH,
flags,
0664);
if (ret != 0) {
db_strerror(ret));
exit(1);
}
+ endtrans();
return;
}
{
int i = 0;
- txn_checkpoint(dbenv, 0, 0, 0);
+ dbenv->txn_checkpoint(dbenv, 0, 0, 0);
id32db->close(id32db, 0);
id32db = NULL;
worddb->close(worddb, 0);
assert(dbenv != NULL);
assert(txn == NULL);
- ret = txn_begin(dbenv,
+ ret = dbenv->txn_begin(dbenv,
NULL, /* No parent transaction */
&txn,
0);
assert(dbenv != NULL);
assert(txn != NULL);
- ret = txn_commit(txn,
+ ret = txn->commit(txn,
0);
if (ret != 0) {
logthing(LOGTHING_CRITICAL,