DB *db = bdb->bi_dn2id->bdi_db;
int rc;
DBT key, data;
+ ID nid;
char *buf;
struct berval ptr, pdn;
ptr.bv_val[ptr.bv_len] = '\0';
DBTzero( &data );
- data.data = (char *) &e->e_id;
- data.size = sizeof( e->e_id );
+ data.data = &nid;
+ data.size = sizeof( nid );
+ BDB_ID2DISK( e->e_id, &nid );
/* store it -- don't override */
rc = db->put( db, txn, &key, &data, DB_NOOVERWRITE );
struct berval *dn,
EntryInfo *ei )
{
- int rc;
- DBT key, data;
struct bdb_info *bdb = (struct bdb_info *) op->o_bd->be_private;
DB *db = bdb->bi_dn2id->bdi_db;
+ int rc;
+ DBT key, data;
+ ID nid;
Debug( LDAP_DEBUG_TRACE, "=> bdb_dn2id(\"%s\")\n", dn->bv_val, 0, 0 );
DBTzero( &key );
/* store the ID */
DBTzero( &data );
- data.data = &ei->bei_id;
+ data.data = &nid;
data.ulen = sizeof(ID);
data.flags = DB_DBT_USERMEM;
Debug( LDAP_DEBUG_TRACE, "<= bdb_dn2id: got id=0x%08lx\n",
ei->bei_id, 0, 0 );
}
+ BDB_DISK2ID( &nid, &ei->bei_id );
op->o_tmpfree( key.data, op->o_tmpmemctx );
return rc;
DB_MULTIPLE_NEXT(ptr, &data, j, len);
if (j) {
++i;
- AC_MEMCPY( i, j, sizeof(ID) );
+ BDB_DISK2ID( j, i );
}
}
rc = cursor->c_get( cursor, key, &data, flags | DB_NEXT_DUP );
int rc;
DBT data;
DBC *cursor;
- ID lo, hi, tmp;
+ ID lo, hi, tmp, nlo, nhi, nid;
char *err;
{
data.ulen = data.size;
data.flags = DB_DBT_USERMEM;
+ BDB_ID2DISK( id, &nid );
+
rc = db->cursor( db, tid, &cursor, bdb->bi_db_opflags );
if ( rc != 0 ) {
Debug( LDAP_DEBUG_ANY, "=> bdb_idl_insert_key: "
"cursor failed: %s (%d)\n", db_strerror(rc), rc, 0 );
return rc;
}
- data.data = &tmp;
+ data.data = &nlo;
/* Fetch the first data item for this key, to see if it
* exists and if it's a range.
*/
rc = cursor->c_get( cursor, key, &data, DB_SET | DB_RMW );
err = "c_get";
if ( rc == 0 ) {
- if ( tmp != 0 ) {
+ if ( nlo != 0 ) {
/* not a range, count the number of items */
db_recno_t count;
rc = cursor->c_count( cursor, &count, 0 );
key2.dlen = key2.ulen;
key2.flags |= DB_DBT_PARTIAL;
- lo = tmp;
- data.data = &hi;
+ BDB_DISK2ID( &nlo, &lo );
+ data.data = &nhi;
+
rc = cursor->c_get( cursor, &key2, &data, DB_NEXT_NODUP );
if ( rc != 0 && rc != DB_NOTFOUND ) {
err = "c_get next_nodup";
goto fail;
}
}
- if ( id < lo )
+ BDB_DISK2ID( &nhi, &hi );
+ if ( id < lo ) {
lo = id;
- else if ( id > hi )
+ nlo = nid;
+ } else if ( id > hi ) {
hi = id;
+ nhi = nid;
+ }
rc = db->del( db, tid, key, 0 );
if ( rc != 0 ) {
err = "del";
goto fail;
}
- data.data = &id;
- id = 0;
+ data.data = &nid;
+ nid = 0;
rc = cursor->c_put( cursor, key, &data, DB_KEYFIRST );
if ( rc != 0 ) {
err = "c_put 0";
goto fail;
}
- id = lo;
+ nid = nlo;
rc = cursor->c_put( cursor, key, &data, DB_KEYLAST );
if ( rc != 0 ) {
err = "c_put lo";
goto fail;
}
- id = hi;
+ nid = nhi;
rc = cursor->c_put( cursor, key, &data, DB_KEYLAST );
if ( rc != 0 ) {
err = "c_put hi";
* the boundaries
*/
hi = id;
- data.data = &lo;
+ data.data = &nlo;
rc = cursor->c_get( cursor, key, &data, DB_NEXT_DUP );
if ( rc != 0 ) {
err = "c_get lo";
goto fail;
}
+ BDB_DISK2ID( &nlo, &lo );
if ( id > lo ) {
- data.data = &hi;
+ data.data = &nhi;
rc = cursor->c_get( cursor, key, &data, DB_NEXT_DUP );
if ( rc != 0 ) {
err = "c_get hi";
goto fail;
}
+ BDB_DISK2ID( &nhi, &hi );
}
if ( id < lo || id > hi ) {
/* Delete the current lo/hi */
err = "c_del";
goto fail;
}
- data.data = &id;
+ data.data = &nid;
rc = cursor->c_put( cursor, key, &data, DB_KEYFIRST );
if ( rc != 0 ) {
err = "c_put lo/hi";
}
}
} else if ( rc == DB_NOTFOUND ) {
-put1: data.data = &id;
+put1: data.data = &nid;
rc = cursor->c_put( cursor, key, &data, DB_NODUPDATA );
/* Don't worry if it's already there */
if ( rc != 0 && rc != DB_KEYEXIST ) {
int rc;
DBT data;
DBC *cursor;
- ID lo, hi, tmp;
+ ID lo, hi, tmp, nid, nlo, nhi;
char *err;
{
bdb_idl_cache_del( bdb, db, key );
}
+ BDB_ID2DISK( id, &nid );
+
DBTzero( &data );
data.data = &tmp;
data.size = sizeof( id );
if ( rc == 0 ) {
if ( tmp != 0 ) {
/* Not a range, just delete it */
- if (tmp != id) {
+ if (tmp != nid) {
/* position to correct item */
- tmp = id;
+ tmp = nid;
rc = cursor->c_get( cursor, key, &data,
DB_GET_BOTH | DB_RMW );
if ( rc != 0 ) {
/* It's a range, see if we need to rewrite
* the boundaries
*/
- data.data = &lo;
+ data.data = &nlo;
rc = cursor->c_get( cursor, key, &data, DB_NEXT_DUP );
if ( rc != 0 ) {
err = "c_get lo";
goto fail;
}
- data.data = &hi;
+ BDB_DISK2ID( &nlo, &lo );
+ data.data = &nhi;
rc = cursor->c_get( cursor, key, &data, DB_NEXT_DUP );
if ( rc != 0 ) {
err = "c_get hi";
goto fail;
}
+ BDB_DISK2ID( &nhi, &hi );
if ( id == lo || id == hi ) {
if ( id == lo ) {
id++;
} else {
if ( id == lo ) {
/* reposition on lo slot */
- data.data = &lo;
+ data.data = &nlo;
cursor->c_get( cursor, key, &data, DB_PREV );
- lo = id;
}
rc = cursor->c_del( cursor, 0 );
if ( rc != 0 ) {
}
}
if ( lo <= hi ) {
- data.data = &id;
+ BDB_ID2DISK( id, &nid );
+ data.data = &nid;
rc = cursor->c_put( cursor, key, &data, DB_KEYFIRST );
if ( rc != 0 ) {
err = "c_put lo/hi";