]> git.sur5r.net Git - openldap/commitdiff
Fix idl_insert_key() return codes.
authorKurt Zeilenga <kurt@openldap.org>
Wed, 1 Sep 1999 18:30:13 +0000 (18:30 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Wed, 1 Sep 1999 18:30:13 +0000 (18:30 +0000)
servers/slapd/back-ldbm/idl.c

index 9fc5011b1f0772594d3c17d25b0a1953e326066b..4f61a0b472337326b7007cc7b01176441ee9a505 100644 (file)
@@ -471,7 +471,8 @@ idl_insert_key(
                rc = idl_change_first( be, db, key, idl, i, k2, tmp );
                break;
 
-       case 2:         /* id not inserted - already there */
+       case 2:         /* id not inserted - already there, do nothing */
+               rc = 0;
                break;
 
        case 3:         /* id not inserted - block is full */
@@ -492,7 +493,8 @@ idl_insert_key(
                                Debug( LDAP_DEBUG_ANY,
                                    "idl_fetch_one (%s) returns NULL\n",
                                    k2.dptr, 0, 0 );
-                               break;
+                               /* split the original block */
+                               goto split;
                        }
 
                        switch ( (rc = idl_insert( &tmp2, id,
@@ -518,14 +520,19 @@ idl_insert_key(
                        case 3:         /* split the original block */
                                break;
                        }
+
                        idl_free( tmp2 );
                }
 
+split:
                /*
                 * must split the block, write both new blocks + update
                 * and write the indirect header block.
                 */
 
+               rc = 0; /* optimistic */
+
+
                /* count how many indirect blocks *//* XXX linear count XXX */
                for ( j = 0; !ID_BLOCK_NOID(idl, j); j++ )
                        ;       /* NULL */