]> git.sur5r.net Git - openldap/commitdiff
Fix - on little-endian machines, store IDs in big-endian order. Otherwise
authorHoward Chu <hyc@openldap.org>
Mon, 10 Dec 2001 16:53:15 +0000 (16:53 +0000)
committerHoward Chu <hyc@openldap.org>
Mon, 10 Dec 2001 16:53:15 +0000 (16:53 +0000)
BDB's default key sort algorithm sorts in the wrong order (and there's no
convenient way to select the correct algorithm). This is an incompatible
change to the database format but will improve back-ldbm's add/delete
characteristics.

servers/slapd/back-ldbm/id2entry.c

index ffeacca293d1977a5729152d7e019d08f85907b1..6f3ea988446a7c4c60b74e80ec2da7dccff3957f 100644 (file)
@@ -25,6 +25,9 @@ id2entry_add( Backend *be, Entry *e )
        DBCache *db;
        Datum           key, data;
        int             len, rc, flags;
+#ifndef WORDS_BIGENDIAN
+       ID              id;
+#endif
 
        ldbm_datum_init( key );
        ldbm_datum_init( data );
@@ -52,7 +55,12 @@ id2entry_add( Backend *be, Entry *e )
                return( -1 );
        }
 
+#ifdef WORDS_BIGENDIAN
        key.dptr = (char *) &e->e_id;
+#else
+       id = htonl(e->e_id);
+       key.dptr = (char *) &id;
+#endif
        key.dsize = sizeof(ID);
 
        ldap_pvt_thread_mutex_lock( &entry2str_mutex );
@@ -85,6 +93,9 @@ id2entry_delete( Backend *be, Entry *e )
        DBCache *db;
        Datum           key;
        int             rc;
+#ifndef WORDS_BIGENDIAN
+       ID              id;
+#endif
 
 #ifdef NEW_LOGGING
        LDAP_LOG(( "backend", LDAP_LEVEL_ENTRY,
@@ -130,7 +141,12 @@ id2entry_delete( Backend *be, Entry *e )
 
        }
 
+#ifdef WORDS_BIGENDIAN
        key.dptr = (char *) &e->e_id;
+#else
+       id = htonl(e->e_id);
+       key.dptr = (char *) &id;
+#endif
        key.dsize = sizeof(ID);
 
        rc = ldbm_cache_delete( db, key );
@@ -155,6 +171,9 @@ id2entry_rw( Backend *be, ID id, int rw )
        DBCache *db;
        Datum           key, data;
        Entry           *e;
+#ifndef WORDS_BIGENDIAN
+       ID              id2;
+#endif
 
        ldbm_datum_init( key );
        ldbm_datum_init( data );
@@ -195,7 +214,12 @@ id2entry_rw( Backend *be, ID id, int rw )
                return( NULL );
        }
 
+#ifdef WORDS_BIGENDIAN
        key.dptr = (char *) &id;
+#else
+       id2 = htonl(id);
+       key.dptr = (char *) &id2;
+#endif
        key.dsize = sizeof(ID);
 
        data = ldbm_cache_fetch( db, key );