]> git.sur5r.net Git - openldap/blobdiff - libraries/libldbm/ldbm.c
Cleanup:
[openldap] / libraries / libldbm / ldbm.c
index 08c3299520ba9dff61acf4604ca433df29790a4b..7d2cfc831b4255af85bd9d3b5ed3fc90fa4e1044 100644 (file)
@@ -1,4 +1,8 @@
 /* ldbm.c - ldap dbm compatibility routines */
+/*
+ * Copyright 1998-1999 The OpenLDAP Foundation, All Rights Reserved.
+ * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
+ */
 
 /* Patched for Berkeley DB version 2.0; /KSp; 98/02/23
  *
@@ -12,7 +16,8 @@
 #ifdef SLAPD_LDBM
 
 #include <stdio.h>
-#include <stdlib.h>
+
+#include <ac/stdlib.h>
 #include <ac/string.h>
 #include <ac/errno.h>
 
@@ -169,8 +174,19 @@ ldbm_open( char *name, int rw, int mode, int dbcachesize )
        DB_INFO dbinfo;
 
        memset( &dbinfo, 0, sizeof( dbinfo ));
+
+#if defined( DB_VERSION_MAJOR ) && defined( DB_VERSION_MINOR ) && \
+    DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR == 4
+       /*
+        * BerkeleyDB 2.4 do not allow db_cachesize
+        * to be specified if an DB_ENV is.
+        */
+#else
+       /* set db_cachesize of MPOOL is NOT being used. */
        if (( ldbm_Env == NULL ) || ( ldbm_Env->mp_info == NULL ))
                dbinfo.db_cachesize = dbcachesize;
+#endif
+
        dbinfo.db_pagesize  = DEFAULT_DB_PAGE_SIZE;
        dbinfo.db_malloc    = ldbm_malloc;
 
@@ -298,16 +314,12 @@ ldbm_delete( LDBM ldbm, Datum key )
 }
 
 Datum
-#ifdef HAVE_BERKELEY_DB2
-ldbm_firstkey( LDBM ldbm, DBC **dbch )
-#else
-ldbm_firstkey( LDBM ldbm )
-#endif
+ldbm_firstkey( LDBM ldbm, LDBMCursor **dbch )
 {
        Datum   key, data;
 
 #ifdef HAVE_BERKELEY_DB2
-       DBC  *dbci;
+       LDBMCursor  *dbci;
 
        ldbm_datum_init( key );
        ldbm_datum_init( data );
@@ -359,11 +371,7 @@ ldbm_firstkey( LDBM ldbm )
 }
 
 Datum
-#ifdef HAVE_BERKELEY_DB2
-ldbm_nextkey( LDBM ldbm, Datum key, DBC *dbcp )
-#else
-ldbm_nextkey( LDBM ldbm, Datum key )
-#endif
+ldbm_nextkey( LDBM ldbm, Datum key, LDBMCursor *dbcp )
 {
        Datum   data;
 
@@ -433,12 +441,16 @@ ldbm_open( char *name, int rw, int mode, int dbcachesize )
 
 #ifdef HAVE_ST_BLKSIZE
        if ( dbcachesize > 0 && stat( name, &st ) == 0 ) {
-               dbcachesize = (dbcachesize / st.st_blksize);
+               dbcachesize /= st.st_blksize;
+               if( dbcachesize == 0 ) dbcachesize = 1;
                gdbm_setopt( db, GDBM_CACHESIZE, &dbcachesize, sizeof(int) );
        }
 #else
-       dbcachesize = (dbcachesize / 4096);
-       gdbm_setopt( db, GDBM_CACHESIZE, &dbcachesize, sizeof(int) );
+       if ( dbcachesize > 0 ) {
+               dbcachesize /= 4096;
+               if( dbcachesize == 0 ) dbcachesize = 1;
+               gdbm_setopt( db, GDBM_CACHESIZE, &dbcachesize, sizeof(int) );
+       }
 #endif
 
        LDBM_UNLOCK;
@@ -502,7 +514,7 @@ ldbm_delete( LDBM ldbm, Datum key )
 }
 
 Datum
-ldbm_firstkey( LDBM ldbm )
+ldbm_firstkey( LDBM ldbm, LDBMCursor **dbcp )
 {
        Datum d;
 
@@ -514,7 +526,7 @@ ldbm_firstkey( LDBM ldbm )
 }
 
 Datum
-ldbm_nextkey( LDBM ldbm, Datum key )
+ldbm_nextkey( LDBM ldbm, Datum key, LDBMCursor *dbcp )
 {
        Datum d;
 
@@ -541,8 +553,7 @@ ldbm_errno( LDBM ldbm )
 
 /* MMAPED DBM HASHING DATABASE */
 
-#include <alloca.h>
-#include <string.h>
+#include <ac/string.h>
 
 /* #define MDBM_DEBUG */
 
@@ -614,7 +625,7 @@ ldbm_open( char *name, int rw, int mode, int dbcachesize )
 
        return( db );
 
-}/* LDBM ldbm_open() */
+}
 
 
 
@@ -640,7 +651,7 @@ ldbm_close( LDBM ldbm )
        fflush( stdout );
 #endif
 
-}/* void ldbm_close() */
+}
 
 
 
@@ -657,7 +668,7 @@ ldbm_sync( LDBM ldbm )
        mdbm_sync( ldbm );
         LDBM_UNLOCK;
 
-}/* void ldbm_sync() */
+}
 
 
 #define MAX_MDBM_RETRY 5
@@ -678,7 +689,7 @@ ldbm_fetch( LDBM ldbm, Datum key )
 
 #ifdef NO_NULL_KEY
        k.key.dsize = key.dsize + 1;                    
-       k.key.dptr = alloca(k.key.dsize);
+       k.key.dptr = malloc(k.key.dsize);
        *(k.key.dptr) = 'l';
        memcpy( (void *)(k.key.dptr + 1), key.dptr, key.dsize );        
 #else
@@ -718,9 +729,13 @@ ldbm_fetch( LDBM ldbm, Datum key )
 
        /* LDBM_UNLOCK; */
 
+#ifdef NO_NULL_KEY
+       free(k.key.dptr);
+#endif
+
        return d;
 
-}/* Datum ldbm_fetch() */
+}
 
 
 
@@ -742,7 +757,7 @@ ldbm_store( LDBM ldbm, Datum key, Datum data, int flags )
 
 #ifdef NO_NULL_KEY
        int_key.dsize = key.dsize + 1;
-       int_key.dptr = alloca( int_key.dsize );
+       int_key.dptr = malloc( int_key.dsize );
        *(int_key.dptr) = 'l';  /* Must not be NULL !*/
        memcpy( (void *)(int_key.dptr + 1), key.dptr, key.dsize );
 #else
@@ -761,10 +776,13 @@ ldbm_store( LDBM ldbm, Datum key, Datum data, int flags )
        fflush( stdout );
 #endif
 
-       return( rc );
+#ifdef NO_NULL_KEY
+       free(int_key.dptr);
+#endif
 
-}/* int ldbm_store() */
+       return( rc );
 
+}
 
 
 
@@ -778,7 +796,7 @@ ldbm_delete( LDBM ldbm, Datum key )
 
 #ifdef NO_NULL_KEY
        int_key.dsize = key.dsize + 1;
-       int_key.dptr = alloca(int_key.dsize);
+       int_key.dptr = malloc(int_key.dsize);
        *(int_key.dptr) = 'l';
        memcpy( (void *)(int_key.dptr + 1), key.dptr, key.dsize );      
 #else
@@ -788,10 +806,13 @@ ldbm_delete( LDBM ldbm, Datum key )
        rc = mdbm_delete( ldbm, int_key );
 
        /* LDBM_UNLOCK; */
+#ifdef NO_NULL_KEY
+       free(int_key.dptr);
+#endif
 
        return( rc );
 
-}/* int ldbm_delete() */
+}
 
 
 
@@ -813,7 +834,7 @@ ldbm_get_next( LDBM ldbm, kvpair (*fptr)(MDBM *, kvpair) )
        /* LDBM_LOCK; */
 
        in.key.dsize = sz;      /* Assume first key in one pg */
-       in.key.dptr = alloca(sz);
+       in.key.dptr = malloc(sz);
        
        in.val.dptr = NULL;     /* Don't need data just key */ 
        in.val.dsize = 0;
@@ -841,27 +862,29 @@ ldbm_get_next( LDBM ldbm, kvpair (*fptr)(MDBM *, kvpair) )
        }
 
        /* LDBM_UNLOCK; */
+       
+       free(in.key.dptr);
 
        return ret;
 
-}/* static Datum ldbm_get_next() */
+}
 
 
 
 
 Datum
-ldbm_firstkey( LDBM ldbm )
+ldbm_firstkey( LDBM ldbm, LDBMCursor **dbcp )
 {
 
        return ldbm_get_next( ldbm, mdbm_first );
 
-}/* Datum ldbm_firstkey() */
+}
 
 
 
 
 Datum
-ldbm_nextkey( LDBM ldbm, Datum key )
+ldbm_nextkey( LDBM ldbm, Datum key, LDBMCursor *dbcp )
 {
 
        /* XXX:
@@ -871,7 +894,7 @@ ldbm_nextkey( LDBM ldbm, Datum key )
 
        return ldbm_get_next( ldbm, mdbm_next );
 
-}/* Datum ldbm_nextkey() */
+}
 
 int
 ldbm_errno( LDBM ldbm )
@@ -879,7 +902,7 @@ ldbm_errno( LDBM ldbm )
        /* XXX: best we can do with current  mdbm interface */
        return( errno );
 
-}/* int ldbm_errno() */
+}
 
 
 
@@ -957,7 +980,7 @@ ldbm_delete( LDBM ldbm, Datum key )
 }
 
 Datum
-ldbm_firstkey( LDBM ldbm )
+ldbm_firstkey( LDBM ldbm, LDBMCursor **dbcp )
 {
        Datum d;
 
@@ -969,7 +992,7 @@ ldbm_firstkey( LDBM ldbm )
 }
 
 Datum
-ldbm_nextkey( LDBM ldbm, Datum key )
+ldbm_nextkey( LDBM ldbm, Datum key, LDBMCursor *dbcp )
 {
        Datum d;