]> git.sur5r.net Git - openldap/commitdiff
Change RDN compare funcs, we don't need lexical ordering
authorHoward Chu <hyc@openldap.org>
Wed, 23 Apr 2003 10:26:06 +0000 (10:26 +0000)
committerHoward Chu <hyc@openldap.org>
Wed, 23 Apr 2003 10:26:06 +0000 (10:26 +0000)
servers/slapd/back-bdb/cache.c
servers/slapd/back-bdb/dn2id.c

index b4d0c9f2313b2f6190a91b6b49f7b66abad35883..ec1490061ff7b6d95548c0e2c0ecb9c075b03c3c 100644 (file)
@@ -169,13 +169,14 @@ bdb_cache_entryinfo_destroy( EntryInfo *e )
        } \
 } while(0)
 
-/* Do a lexical sort on normalized RDNs */
+/* Do a length-ordered sort on normalized RDNs */
 static int
 bdb_rdn_cmp( const void *v_e1, const void *v_e2 )
 {
        const EntryInfo *e1 = v_e1, *e2 = v_e2;
-       int rc = strncmp( e1->bei_nrdn.bv_val, e2->bei_nrdn.bv_val, e1->bei_nrdn.bv_len );
-       if (rc == 0) rc = e1->bei_nrdn.bv_len - e2->bei_nrdn.bv_len;
+       int rc = e1->bei_nrdn.bv_len - e2->bei_nrdn.bv_len;
+       if (rc == 0) rc = strncmp( e1->bei_nrdn.bv_val, e2->bei_nrdn.bv_val,
+               e1->bei_nrdn.bv_len );
        return rc;
 }
 
@@ -288,8 +289,10 @@ bdb_entryinfo_add_internal(
                addkid = 0;
                cache->c_cursize -= incr;
 #ifdef BDB_HIER
-               if ( ei->bei_rdn.bv_val )
+               if ( ei->bei_rdn.bv_val ) {
                        ber_memfree_x( ei->bei_rdn.bv_val, NULL );
+                       ei->bei_rdn.bv_val = NULL;
+               }
 #endif
        } else {
                LRU_ADD( cache, ei2 );
index eed36ae231495031254ce4f4c7f83f0eeaaefbe6..51a5edc8fe5b732d465746e3aefe0d94b6a616d5 100644 (file)
@@ -503,7 +503,7 @@ typedef struct diskNode {
 } diskNode;
 
 /* Sort function for the sorted duplicate data items of a dn2id key.
- * Sorts based on normalized RDN, in lexical order.
+ * Sorts based on normalized RDN, in length order.
  */
 int
 bdb_dup_compare(
@@ -530,15 +530,9 @@ bdb_dup_compare(
 
        curlen = ptr[0] << 8 | *pt2;
 
-       if ( usrlen < 0 ) {
-               if ( curlen < 0 ) return 0;
-               return -1;
-       }
-
-       if ( curlen < 0 ) return 1;
+       rc = usrlen - curlen;
 
-       rc = strncmp( usr->nrdn, cur->nrdn, usrlen );
-       if ( rc == 0 ) rc = usrlen - curlen;
+       if ( rc == 0 ) rc = strncmp( usr->nrdn, cur->nrdn, usrlen );
        return rc;
 }