/* Pau Freixes, pfreixes@milnou.net
 *
 * Create one secure environment for libdb berkeley process
 *
 * Flags used for this environment
 * DB_CREATE = Create Environment
 * DB_INIT_CDB = Initialize locking for the Berkeley DB Concurrent Data Store product
 * DB_INIT_MPOOL = Initialize the shared memory buffer pool subsystem
 *
 * For default mapped regions are backed in filesystem, for example _db.001 ....
 */


#include <db.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#ifndef ROOTPATH
    #define ROOTPATH "./env"
#endif

#ifndef DATABASE
    #define DATABASE "test"
#endif

int main(int argc, char **argv)
{
    DB_ENV *dbenv;
    DB *dbp;

    int ret;
    char * progname = argv[0];

    if ((ret = db_env_create(&dbenv, 0)) != 0) {
        printf("%s: %s\n", progname, db_strerror(ret));
        goto err;
    }

    dbenv->set_errpfx(dbenv, progname);

    if ( (ret = dbenv->open(dbenv, ROOTPATH, DB_CREATE | DB_INIT_CDB | DB_INIT_MPOOL, 0)) != 0) 
    { 
        dbenv->err(dbenv, ret, "environment open: %s", ROOTPATH); 
        goto err; 
    }


    if ((ret = db_create(&dbp, dbenv, 0)) != 0) {
        dbenv->err(dbenv, ret, "database create");
        goto err;
    }
   
    if ((ret = dbp->open(dbp, NULL, DATABASE, NULL, DB_BTREE, DB_CREATE, 0664)) != 0) {
        dbenv->err(dbenv, ret, "DB->open: %s", DATABASE);
        goto err;
    } 

    

    dbp->close(dbp, 0);
    dbenv->close(dbenv, 0);
 
    exit(0);
err:
    exit(1);
}
