3 * Copyright 1998,1999 The OpenLDAP Foundation, Redwood City, California, USA
6 * Redistribution and use in source and binary forms are permitted only
7 * as authorized by the OpenLDAP Public License. A copy of this
8 * license is available at http://www.OpenLDAP.org/license.html or
9 * in file LICENSE in the top-level directory of the distribution.
11 /* ldbm.h - ldap dbm compatibility routine header file */
16 #include <ldap_cdefs.h>
18 #if defined( LDBM_USE_DBBTREE ) || defined( LDBM_USE_DBHASH )
20 /*****************************************************************
22 * use berkeley db btree or hash package *
24 *****************************************************************/
26 #include <sys/types.h>
38 # ifdef HAVE_BERKELEY_DB2
39 # define R_NOOVERWRITE DB_NOOVERWRITE
40 # ifndef DEFAULT_DB_PAGE_SIZE
41 # define DEFAULT_DB_PAGE_SIZE 4096
57 #ifdef HAVE_BERKELEY_DB2
58 typedef DBC LDBMCursor;
60 # define LDBM_READER DB_RDONLY
61 # define LDBM_WRITER 0x00000 /* hopefully */
62 # ifdef HAVE_BERKELEY_DB2_DB_THREAD
63 # define LDBM_WRCREAT (DB_NOMMAP|DB_CREATE|DB_THREAD)
64 # define LDBM_NEWDB (DB_TRUNCATE|DB_CREATE|DB_THREAD)
66 # define LDBM_WRCREAT (DB_NOMMAP|DB_CREATE)
67 # define LDBM_NEWDB (DB_TRUNCATE|DB_CREATE)
71 typedef void LDBMCursor;
72 # define LDBM_READER O_RDONLY
73 # define LDBM_WRITER O_RDWR
74 # define LDBM_WRCREAT (O_RDWR|O_CREAT)
75 # define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
83 #define LDBM_LOCKING 0
84 #define LDBM_NOLOCKING 0
87 #define LDBM_INSERT R_NOOVERWRITE
88 #define LDBM_REPLACE 0
90 #ifdef LDBM_USE_DBBTREE
91 # define LDBM_ORDERED 1
92 # define LDBM_SUFFIX ".dbb"
93 # define DB_TYPE DB_BTREE
95 # define LDBM_SUFFIX ".dbh"
96 # define DB_TYPE DB_HASH
99 #elif defined( HAVE_GDBM )
101 /*****************************************************************
103 * use gdbm if possible *
105 *****************************************************************/
112 typedef Datum LDBMCursor;
113 typedef GDBM_FILE LDBM;
115 extern gdbm_error gdbm_errno;
120 #define LDBM_READER GDBM_READER
121 #define LDBM_WRITER GDBM_WRITER
122 #define LDBM_WRCREAT GDBM_WRCREAT
123 #define LDBM_NEWDB GDBM_NEWDB
126 #define LDBM_NOSYNC GDBM_FAST
128 #define LDBM_NOSYNC 0
132 #define LDBM_SYNC GDBM_SYNC
137 #define LDBM_LOCKING 0
139 #define LDBM_NOLOCKING GDBM_NOLOCK
141 #define LDBM_NOLOCKING 0
144 #define LDBM_SUFFIX ".gdbm"
146 /* for ldbm_insert */
147 #define LDBM_INSERT GDBM_INSERT
148 #define LDBM_REPLACE GDBM_REPLACE
150 #elif defined( HAVE_MDBM )
152 /*****************************************************************
154 * use mdbm if possible *
156 *****************************************************************/
163 typedef int LDBMCursor;
168 #include <sys/types.h>
169 #include <sys/stat.h>
173 #define LDBM_READER O_RDONLY
174 #define LDBM_WRITER O_RDWR
175 #define LDBM_WRCREAT (O_RDWR|O_CREAT)
176 #define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
179 #define LDBM_NOSYNC 0
180 #define LDBM_LOCKING 0
181 #define LDBM_NOLOCKING 0
183 #define LDBM_SUFFIX ".mdbm"
185 /* for ldbm_insert */
186 #define LDBM_INSERT MDBM_INSERT
187 #define LDBM_REPLACE MDBM_REPLACE
189 #elif defined( HAVE_NDBM )
191 /*****************************************************************
193 * if none of the above use ndbm, the standard unix thing *
195 *****************************************************************/
206 typedef int LDBMCursor;
212 #define LDBM_READER O_RDONLY
213 #define LDBM_WRITER O_WRONLY
214 #define LDBM_WRCREAT (O_RDWR|O_CREAT)
215 #define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
217 #define LDBM_NOSYNC 0
219 #define LDBM_NOLOCK 0
222 #define LDBM_SUFFIX ".ndbm"
224 /* for ldbm_insert */
225 #define LDBM_INSERT DBM_INSERT
226 #define LDBM_REPLACE DBM_REPLACE
232 LIBLDBM_F (int) ldbm_initialize( void );
233 LIBLDBM_F (int) ldbm_shutdown( void );
235 LIBLDBM_F (int) ldbm_errno( LDBM ldbm );
236 LIBLDBM_F (LDBM) ldbm_open( char *name, int rw, int mode, int dbcachesize );
237 LIBLDBM_F (void) ldbm_close( LDBM ldbm );
238 LIBLDBM_F (void) ldbm_sync( LDBM ldbm );
239 LIBLDBM_F (void) ldbm_datum_free( LDBM ldbm, Datum data );
240 LIBLDBM_F (Datum) ldbm_datum_dup( LDBM ldbm, Datum data );
241 LIBLDBM_F (Datum) ldbm_fetch( LDBM ldbm, Datum key );
242 LIBLDBM_F (int) ldbm_store( LDBM ldbm, Datum key, Datum data, int flags );
243 LIBLDBM_F (int) ldbm_delete( LDBM ldbm, Datum key );
245 LIBLDBM_F (Datum) ldbm_firstkey( LDBM ldbm, LDBMCursor **cursor );
246 LIBLDBM_F (Datum) ldbm_nextkey( LDBM ldbm, Datum key, LDBMCursor *cursor );
248 /* initialization of Datum structures */
249 #ifdef HAVE_BERKELEY_DB2
250 LIBLDBM_F (void *) ldbm_malloc( size_t size );
251 # define ldbm_datum_init(d) ((void)memset(&(d), 0, sizeof(Datum)))
253 # define ldbm_datum_init(d) ((void)0)
254 #endif /* HAVE_BERKELEY_DB2 */
258 #endif /* _ldbm_h_ */