1 /* init.c - initialize bdb backend */
4 * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.
5 * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
11 #include <ac/string.h>
15 int bdb_next_id( BackendDB *be, DB_TXN *tid, ID *out )
17 struct bdb_info *bdb = (struct bdb_info *) be->be_private;
24 rc = txn_begin( bdb->bi_dbenv, tid, <id, 0 );
30 key.data = (char *) &kid;
31 key.size = sizeof( kid );
34 data.data = (char *) &id;
35 data.ulen = sizeof( id );
36 data.flags = DB_DBT_USERMEM;
38 /* get exiting value (with write lock) */
39 rc = bdb->bi_nextid->bdi_db->get( bdb->bi_nextid->bdi_db,
40 ltid, &key, &data, DB_RMW );
42 if( rc == DB_NOTFOUND ) {
43 /* must be first add */
46 } else if( rc != 0 ) {
49 } else if ( data.size != sizeof(ID) ) {
58 rc = bdb->bi_nextid->bdi_db->put( bdb->bi_nextid->bdi_db,
59 ltid, &key, &data, 0 );
65 (void) txn_abort( ltid );
67 rc = txn_commit( ltid, 0 );