2 * Copyright 1998,1999 The OpenLDAP Foundation, Redwood City, California, USA
5 * Redistribution and use in source and binary forms are permitted only
6 * as authorized by the OpenLDAP Public License. A copy of this
7 * license is available at http://www.OpenLDAP.org/license.html or
8 * in file LICENSE in the top-level directory of the distribution.
10 /* ldbm.h - ldap dbm compatibility routine header file */
15 #include <ldap_cdefs.h>
17 #ifdef LDBM_USE_DBBTREE
19 /*****************************************************************
21 * use berkeley db btree package *
23 *****************************************************************/
25 #include <sys/types.h>
37 # ifdef HAVE_BERKELEY_DB2
38 # define R_NOOVERWRITE DB_NOOVERWRITE
39 # define DEFAULT_DB_PAGE_SIZE 1024
54 #define DB_TYPE DB_BTREE
57 #ifdef HAVE_BERKELEY_DB2
58 # define LDBM_READER DB_RDONLY
59 # define LDBM_WRITER 0x00000 /* hopefully */
60 # define LDBM_WRCREAT (DB_NOMMAP|DB_CREATE|DB_THREAD)
61 # define LDBM_NEWDB (DB_TRUNCATE|DB_CREATE|DB_THREAD)
63 # define LDBM_READER O_RDONLY
64 # define LDBM_WRITER O_RDWR
65 # define LDBM_WRCREAT (O_RDWR|O_CREAT)
66 # define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
71 #define LDBM_SUFFIX ".dbb"
72 #define LDBM_ORDERED 1
75 #define LDBM_INSERT R_NOOVERWRITE
76 #define LDBM_REPLACE 0
77 #define LDBM_SYNC 0x80000000
79 #elif defined( LDBM_USE_DBHASH )
81 /*****************************************************************
83 * use berkeley db hash package *
85 *****************************************************************/
87 #include <sys/types.h>
100 # define R_NOOVERWRITE DB_NOOVERWRITE
101 # define DEFAULT_DB_PAGE_SIZE 1024
115 #define DB_TYPE DB_HASH
119 # define LDBM_READER DB_RDONLY
120 # define LDBM_WRITER 0x00000 /* hopefully */
121 # define LDBM_WRCREAT (DB_NOMMAP|DB_CREATE|DB_THREAD)
122 # define LDBM_NEWDB (DB_TRUNCATE|DB_CREATE|DB_THREAD)
124 # define LDBM_READER O_RDONLY
125 # define LDBM_WRITER O_RDWR
126 # define LDBM_WRCREAT (O_RDWR|O_CREAT)
127 # define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
131 #define LDBM_SUFFIX ".dbh"
133 /* for ldbm_insert */
134 #define LDBM_INSERT R_NOOVERWRITE
135 #define LDBM_REPLACE 0
136 #define LDBM_SYNC 0x80000000
138 #elif defined( HAVE_GDBM )
140 /*****************************************************************
142 * use gdbm if possible *
144 *****************************************************************/
152 typedef GDBM_FILE LDBM;
154 extern gdbm_error gdbm_errno;
159 #define LDBM_READER GDBM_READER
160 #define LDBM_WRITER GDBM_WRITER
161 #define LDBM_WRCREAT GDBM_WRCREAT
162 #define LDBM_NEWDB GDBM_NEWDB
163 #define LDBM_FAST GDBM_FAST
165 #define LDBM_SUFFIX ".gdbm"
167 /* for ldbm_insert */
168 #define LDBM_INSERT GDBM_INSERT
169 #define LDBM_REPLACE GDBM_REPLACE
170 #define LDBM_SYNC 0x80000000
172 #elif defined( HAVE_MDBM )
174 /*****************************************************************
176 * use mdbm if possible *
178 *****************************************************************/
189 #include <sys/types.h>
190 #include <sys/stat.h>
194 #define LDBM_READER O_RDONLY
195 #define LDBM_WRITER O_RDWR
196 #define LDBM_WRCREAT (O_RDWR|O_CREAT)
197 #define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
200 #define LDBM_SUFFIX ".mdbm"
202 /* for ldbm_insert */
203 #define LDBM_INSERT MDBM_INSERT
204 #define LDBM_REPLACE MDBM_REPLACE
205 #define LDBM_SYNC 0x80000000
208 #elif defined( HAVE_NDBM )
210 /*****************************************************************
212 * if none of the above use ndbm, the standard unix thing *
214 *****************************************************************/
231 #define LDBM_READER O_RDONLY
232 #define LDBM_WRITER O_WRONLY
233 #define LDBM_WRCREAT (O_RDWR|O_CREAT)
234 #define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
237 #define LDBM_SUFFIX ".ndbm"
239 /* for ldbm_insert */
240 #define LDBM_INSERT DBM_INSERT
241 #define LDBM_REPLACE DBM_REPLACE
248 int ldbm_initialize( void );
249 int ldbm_shutdown( void );
251 int ldbm_errno( LDBM ldbm );
252 LDBM ldbm_open( char *name, int rw, int mode, int dbcachesize );
253 void ldbm_close( LDBM ldbm );
254 void ldbm_sync( LDBM ldbm );
255 void ldbm_datum_free( LDBM ldbm, Datum data );
256 Datum ldbm_datum_dup( LDBM ldbm, Datum data );
257 Datum ldbm_fetch( LDBM ldbm, Datum key );
258 int ldbm_store( LDBM ldbm, Datum key, Datum data, int flags );
259 int ldbm_delete( LDBM ldbm, Datum key );
261 #if HAVE_BERKELEY_DB2
262 void *ldbm_malloc( size_t size );
263 Datum ldbm_firstkey( LDBM ldbm, DBC **dbch );
264 Datum ldbm_nextkey( LDBM ldbm, Datum key, DBC *dbcp );
266 Datum ldbm_firstkey( LDBM ldbm );
267 Datum ldbm_nextkey( LDBM ldbm, Datum key );
271 /* initialization of Datum structures */
272 #ifdef HAVE_BERKELEY_DB2
273 # define ldbm_datum_init(d) ((void)memset(&(d), 0, sizeof(Datum)))
275 # define ldbm_datum_init(d) ((void)0)
276 #endif /* HAVE_BERKELEY_DB2 */
280 #endif /* _ldbm_h_ */