int cache_init(cache_t *c, void (*freevalue)(void *value)) { memset(c, '\0', sizeof(*c)); int ret; DB_ENV *dbenv; ret = db_env_create(&dbenv, 0); dbenv->err(dbenv,ret,"err db_env_create "); dbenv->set_errfile(dbenv, stderr); dbenv->err(dbenv,ret,"err set_errfile "); if ((ret = dbenv->set_shm_key(dbenv, 664)) != 0) { dbenv->err(dbenv,ret,"err set_shm_key "); return 0; } ret = dbenv->open(dbenv,bfile(_temp_path),DB_CREATE | DB_INIT_MPOOL | DB_INIT_CDB ,0); dbenv->err(dbenv,ret,"err db_env_open "); /* Create and initialize database object */ if ((ret = db_create(&c->c_data, dbenv, 0)) != 0) { fprintf(stderr, "%s: db_create: %s\n", "bbdocument", db_strerror(ret)); return 0; } #ifdef DEBUG dbenv->stat_print(dbenv, DB_STAT_ALL); #endif /* open the database. */ if ((ret = c->c_data->open(c->c_data, NULL, "libcachedb", NULL, DB_BTREE, DB_CREATE, 0)) != 0) { c->c_data->err(c->c_data, ret, "db open"); //goto err1; //dette skjer nor collection mappen ikke er opprettet enda, typisk forde vi ikke har lagret et dokument der enda #ifdef DEBUG printf("can't dbp->open(), but db_create() was sucessful!\n"); #endif return 0; } #ifdef DEBUG c->c_data->stat_print(c->c_data, DB_STAT_ALL); #endif pthread_mutex_init(&c->c_lock, NULL); c->c_freevalue = freevalue; return 1; }