]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-ldbm/idl.c
Notices and acknowledgements
[openldap] / servers / slapd / back-ldbm / idl.c
index 79f55a6ffbf8e5d0af7a90d5ed62e77be592320b..16c3e6da519b6b7decbdaee40696cf4a07d909cc 100644 (file)
@@ -553,14 +553,13 @@ idl_insert_key(
 
 #ifndef USE_INDIRECT_NIDS
        /* select the block to try inserting into *//* XXX linear search XXX */
-       for ( i = 0; !ID_BLOCK_NOID(idl, i) && id > ID_BLOCK_ID(idl, i); i++ )
+       for ( i = 0; !ID_BLOCK_NOID(idl, i) && id >= ID_BLOCK_ID(idl, i); i++ )
                ;       /* NULL */
 #else
        i = idl_find(idl, id);
-       if (ID_BLOCK_ID(idl, i) < id)
+       if (ID_BLOCK_ID(idl, i) <= id)
                i++;
 #endif
-
        if ( i != 0 ) {
                i--;
                first = 0;
@@ -568,6 +567,11 @@ idl_insert_key(
                first = 1;
        }
 
+       /* At this point, the following condition must be true:
+        * ID_BLOCK_ID(idl, i) <= id && id < ID_BLOCK_ID(idl, i+1)
+        * except when i is the first or the last block.
+        */
+
        /* get the block */
        cont_alloc( &k2, &key );
        cont_id( &k2, ID_BLOCK_ID(idl, i) );