Back to index

openldap  2.4.31
Functions
nextid.c File Reference
#include "portable.h"
#include <stdio.h>
#include <ac/string.h>
#include "back-bdb.h"

Go to the source code of this file.

Functions

int bdb_next_id (BackendDB *be, ID *out)
int bdb_last_id (BackendDB *be, DB_TXN *tid)

Function Documentation

int bdb_last_id ( BackendDB be,
DB_TXN *  tid 
)

Definition at line 35 of file nextid.c.

{
       struct bdb_info *bdb = (struct bdb_info *) be->be_private;
       int rc;
       ID id = 0;
       unsigned char idbuf[sizeof(ID)];
       DBT key, data;
       DBC *cursor;

       DBTzero( &key );
       key.flags = DB_DBT_USERMEM;
       key.data = (char *) idbuf;
       key.ulen = sizeof( idbuf );

       DBTzero( &data );
       data.flags = DB_DBT_USERMEM | DB_DBT_PARTIAL;

       /* Get a read cursor */
       rc = bdb->bi_id2entry->bdi_db->cursor( bdb->bi_id2entry->bdi_db,
              tid, &cursor, 0 );

       if (rc == 0) {
              rc = cursor->c_get(cursor, &key, &data, DB_LAST);
              cursor->c_close(cursor);
       }

       switch(rc) {
       case DB_NOTFOUND:
              rc = 0;
              break;
       case 0:
              BDB_DISK2ID( idbuf, &id );
              break;

       default:
              Debug( LDAP_DEBUG_ANY,
                     "=> bdb_last_id: get failed: %s (%d)\n",
                     db_strerror(rc), rc, 0 );
              goto done;
       }

       bdb->bi_lastid = id;

done:
       return rc;
}
int bdb_next_id ( BackendDB be,
ID out 
)

Definition at line 24 of file nextid.c.

{
       struct bdb_info *bdb = (struct bdb_info *) be->be_private;

       ldap_pvt_thread_mutex_lock( &bdb->bi_lastid_mutex );
       *out = ++bdb->bi_lastid;
       ldap_pvt_thread_mutex_unlock( &bdb->bi_lastid_mutex );

       return 0;
}