]> git.ipfire.org Git - thirdparty/openldap.git/commitdiff
Add idl_check() code from HEAD
authorKurt Zeilenga <kurt@openldap.org>
Mon, 1 Oct 2001 21:20:29 +0000 (21:20 +0000)
committerKurt Zeilenga <kurt@openldap.org>
Mon, 1 Oct 2001 21:20:29 +0000 (21:20 +0000)
CHANGES
servers/slapd/back-ldbm/idl.c

diff --git a/CHANGES b/CHANGES
index c437c9b8a2ddbf7e40083bf1f0cf4bf771716880..20c0fe1a02e718018345682e2495545517cddf5f 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -11,6 +11,7 @@ OpenLDAP 2.0.16 Engineering
        Updated -lldap_r pthread stack size
        Updated slapd acl assert checks
        Removed -lldbm use of Berkeley CDB
+       Added back-ldbm idl_check() code
        Build environment
                Updated ltconfig for MacOS X 10.1 (ITS#1361)
                Updated slapd.conf with ACL example
index 81f1954f57be0d1b285aba8b645422ad092bd2f0..0ade40a580ccdb0728ebb1175bd95f2e8fbc3bd3 100644 (file)
@@ -45,6 +45,27 @@ static void cont_free( Datum *cont )
        ch_free( cont->dptr );
 }
 
+#ifdef LDBM_DEBUG_IDL
+static void idl_check(ID_BLOCK *idl)
+{
+       int i;
+       ID_BLOCK last;
+
+       if( ID_BLOCK_INDIRECT(idl) || ID_BLOCK_ALLIDS(idl)
+               || ID_BLOCK_NIDS(idl) <= 1 )
+       {
+               return;
+       }
+
+       for( last = ID_BLOCK_ID(idl, 0), i = 1;
+               i < ID_BLOCK_NIDS(idl);
+               last = ID_BLOCK_ID(idl, i), i++ )
+       {
+               assert (last < ID_BLOCK_ID(idl, i) );
+       }
+}
+#endif
+
 /* Allocate an ID_BLOCK with room for nids ids */
 ID_BLOCK *
 idl_alloc( unsigned int nids )
@@ -210,6 +231,10 @@ idl_fetch(
        }
        free( (char *) tmp );
 
+#ifdef LDBM_DEBUG_IDL
+       idl_check(idl);
+#endif
+
        Debug( LDAP_DEBUG_TRACE, "<= idl_fetch %ld ids (%ld max)\n",
               ID_BLOCK_NIDS(idl), ID_BLOCK_NMAX(idl), 0 );
        return( idl );
@@ -229,6 +254,10 @@ idl_store(
        Datum   data;
        struct ldbminfo *li = (struct ldbminfo *) be->be_private;
 
+#ifdef LDBM_DEBUG_IDL
+       idl_check(idl);
+#endif
+
        ldbm_datum_init( data );
 
        /* Debug( LDAP_DEBUG_TRACE, "=> idl_store\n", 0, 0, 0 ); */
@@ -293,6 +322,11 @@ idl_split_block(
            (char *) &ID_BLOCK_ID(b, nr),
                nl * sizeof(ID) );
        ID_BLOCK_NIDS(*left) = nl + (nr == 0 ? 0 : 1);
+
+#ifdef LDBM_DEBUG_IDL
+       idl_check(*right);
+       idl_check(*left);
+#endif
 }
 
 
@@ -703,6 +737,10 @@ idl_insert( ID_BLOCK **idl, ID id, unsigned int maxids )
                '\0',
            (ID_BLOCK_NMAX(*idl) - ID_BLOCK_NIDS(*idl)) * sizeof(ID) );
 
+#ifdef LDBM_DEBUG_IDL
+       idl_check(*idl);
+#endif
+
        return( i == 0 ? 1 : 0 );       /* inserted - first id changed or not */
 }
 
@@ -837,6 +875,10 @@ idl_dup( ID_BLOCK *idl )
                (char *) idl,
                (ID_BLOCK_NMAX(idl) + ID_BLOCK_IDS_OFFSET) * sizeof(ID) );
 
+#ifdef LDBM_DEBUG_IDL
+       idl_check(new);
+#endif
+
        return( new );
 }
 
@@ -874,6 +916,11 @@ idl_intersection(
 
        n = idl_dup( idl_min( a, b ) );
 
+#ifdef LDBM_DEBUG_IDL
+       idl_check(a);
+       idl_check(b);
+#endif
+
        for ( ni = 0, ai = 0, bi = 0; ai < ID_BLOCK_NIDS(a); ai++ ) {
                for ( ;
                        bi < ID_BLOCK_NIDS(b) && ID_BLOCK_ID(b, bi) < ID_BLOCK_ID(a, ai);
@@ -897,6 +944,10 @@ idl_intersection(
        }
        ID_BLOCK_NIDS(n) = ni;
 
+#ifdef LDBM_DEBUG_IDL
+       idl_check(n);
+#endif
+
        return( n );
 }
 
@@ -924,6 +975,11 @@ idl_union(
                return( idl_allids( be ) );
        }
 
+#ifdef LDBM_DEBUG_IDL
+       idl_check(a);
+       idl_check(b);
+#endif
+
        if ( ID_BLOCK_NIDS(b) < ID_BLOCK_NIDS(a) ) {
                n = a;
                a = b;
@@ -956,6 +1012,10 @@ idl_union(
        }
        ID_BLOCK_NIDS(n) = ni;
 
+#ifdef LDBM_DEBUG_IDL
+       idl_check(n);
+#endif
+
        return( n );
 }
 
@@ -1033,6 +1093,10 @@ idl_notin(
        }
        ID_BLOCK_NIDS(n) = ni;
 
+#ifdef LDBM_DEBUG_IDL
+       idl_check(n);
+#endif
+
        return( n );
 }