void uiddb_init()
{
- db_env_create(&dbenv, 0);
- dbenv->open(dbenv, get_tmp_dir(), DB_INIT_MPOOL | DB_INIT_CDB | DB_CREATE, 0600);
+ int ret;
+ int flags = DB_INIT_MPOOL | DB_INIT_CDB | DB_CREATE;
+
+ if ((ret = db_env_create(&dbenv, 0)) != 0) {
+ g_warning("db_env_create: %s", db_strerror(ret));
+ return;
+ }
+ if ((ret = dbenv->open(dbenv, get_tmp_dir(), flags, 0600)) != 0) {
+ if (ret != DB_RUNRECOVERY) {
+ g_warning("dbenv->open: %s", db_strerror(ret));
+ return;
+ }
+ flags |= DB_RECOVER;
+ if ((ret = dbenv->open(dbenv, get_tmp_dir(), flags, 0600)) != 0) {
+ g_warning("dbenv->open (recovering): %s", db_strerror(ret));
+ return;
+ }
+ }
initialized = TRUE;
}