-
-#else /* BDB_IDL_MULTI */
-
- data.data = ids;
- data.ulen = sizeof( ids );
- data.flags = DB_DBT_USERMEM;
-
- /* fetch the key for read/modify/write */
- rc = db->get( db, tid, key, &data, DB_RMW | bdb->bi_db_opflags );
-
- if ( rc != 0 ) {
-#ifdef NEW_LOGGING
- LDAP_LOG( INDEX, ERR, "bdb_idl_delete_key: get failed: %s (%d)\n",
- db_strerror(rc), rc, 0 );
-#else
- Debug( LDAP_DEBUG_ANY, "=> bdb_idl_delete_key: "
- "get failed: %s (%d)\n",
- db_strerror(rc), rc, 0 );
-#endif
- return rc;
-
- } else if ( data.size == 0 || data.size % sizeof( ID ) ) {
- /* size not multiple of ID size */
-#ifdef NEW_LOGGING
- LDAP_LOG( INDEX, ERR,
- "bdb_idl_delete_key: odd size: expected: %ld multiple, got %ld\n",
- (long) sizeof( ID ), (long) data.size, 0 );
-#else
- Debug( LDAP_DEBUG_ANY, "=> bdb_idl_delete_key: "
- "odd size: expected %ld multiple, got %ld\n",
- (long) sizeof( ID ), (long) data.size, 0 );
-#endif
- return -1;
-
- } else if ( BDB_IDL_IS_RANGE(ids) ) {
- return 0;
-
- } else if ( data.size != (1 + ids[0]) * sizeof( ID ) ) {
- /* size mismatch */
-#ifdef NEW_LOGGING
- LDAP_LOG( INDEX, ERR,
- "bdb_idl_delete_key: get size mismatch: expected: %ld, got %ld\n",
- (long) ((1 + ids[0]) * sizeof( ID )), (long) data.size, 0 );
-#else
- Debug( LDAP_DEBUG_ANY, "=> bdb_idl_delete_key: "
- "get size mismatch: expected %ld, got %ld\n",
- (long) ((1 + ids[0]) * sizeof( ID )), (long) data.size, 0 );
-#endif
- return -1;
-
- } else {
- rc = idl_delete( ids, id );
-
- if( rc != 0 ) {
-#ifdef NEW_LOGGING
- LDAP_LOG( INDEX, ERR,
- "bdb_idl_delete_key: delete failed: (%d)\n", rc, 0, 0 );
-#else
- Debug( LDAP_DEBUG_ANY, "=> bdb_idl_delete_key: "
- "idl_delete failed (%d)\n",
- rc, 0, 0 );
-#endif
- return rc;
- }
-
- if( ids[0] == 0 ) {
- /* delete the key */
- rc = db->del( db, tid, key, 0 );
- if( rc != 0 ) {
-#ifdef NEW_LOGGING
- LDAP_LOG( INDEX, ERR,
- "bdb_idl_delete_key: delete failed: %s (%d)\n",
- db_strerror(rc), rc, 0 );
-#else
- Debug( LDAP_DEBUG_ANY, "=> bdb_idl_delete_key: "
- "delete failed: %s (%d)\n",
- db_strerror(rc), rc, 0 );
-#endif
- }
- return rc;
- }
-
- data.size = (ids[0]+1) * sizeof( ID );
- }
-
- /* store the key */
- rc = db->put( db, tid, key, &data, 0 );
-
-#endif /* BDB_IDL_MULTI */
-