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 #ifdef LDBM_USE_DBBTREE
20 /*****************************************************************
22 * use berkeley db btree package *
24 *****************************************************************/
26 #include <sys/types.h>
38 # ifdef HAVE_BERKELEY_DB2
39 # define R_NOOVERWRITE DB_NOOVERWRITE
40 # define DEFAULT_DB_PAGE_SIZE 1024
54 #define DB_TYPE DB_BTREE
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|DB_THREAD)
67 # define LDBM_NEWDB (DB_TRUNCATE|DB_CREATE|DB_THREAD)
71 typedef int 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)
82 #define LDBM_SUFFIX ".dbb"
83 #define LDBM_ORDERED 1
86 #define LDBM_INSERT R_NOOVERWRITE
87 #define LDBM_REPLACE 0
88 #define LDBM_SYNC 0x80000000
90 #elif defined( LDBM_USE_DBHASH )
92 /*****************************************************************
94 * use berkeley db hash package *
96 *****************************************************************/
98 #include <sys/types.h>
105 # ifdef HAVE_DB1_DB_H
111 # define R_NOOVERWRITE DB_NOOVERWRITE
112 # define DEFAULT_DB_PAGE_SIZE 1024
124 #define DB_TYPE DB_HASH
128 typedef DBC LDBMCursor;
129 # define LDBM_READER DB_RDONLY
130 # define LDBM_WRITER 0x00000 /* hopefully */
131 # define LDBM_WRCREAT (DB_NOMMAP|DB_CREATE|DB_THREAD)
132 # define LDBM_NEWDB (DB_TRUNCATE|DB_CREATE|DB_THREAD)
134 typedef int LDBMCursor;
135 # define LDBM_READER O_RDONLY
136 # define LDBM_WRITER O_RDWR
137 # define LDBM_WRCREAT (O_RDWR|O_CREAT)
138 # define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
144 #define LDBM_SUFFIX ".dbh"
146 /* for ldbm_insert */
147 #define LDBM_INSERT R_NOOVERWRITE
148 #define LDBM_REPLACE 0
149 #define LDBM_SYNC 0x80000000
151 #elif defined( HAVE_GDBM )
153 /*****************************************************************
155 * use gdbm if possible *
157 *****************************************************************/
164 typedef int LDBMCursor;
165 typedef GDBM_FILE LDBM;
167 extern gdbm_error gdbm_errno;
172 #define LDBM_READER GDBM_READER
173 #define LDBM_WRITER GDBM_WRITER
174 #define LDBM_WRCREAT GDBM_WRCREAT
175 #define LDBM_NEWDB GDBM_NEWDB
176 #define LDBM_FAST GDBM_FAST
178 #define LDBM_SUFFIX ".gdbm"
180 /* for ldbm_insert */
181 #define LDBM_INSERT GDBM_INSERT
182 #define LDBM_REPLACE GDBM_REPLACE
183 #define LDBM_SYNC 0x80000000
185 #elif defined( HAVE_MDBM )
187 /*****************************************************************
189 * use mdbm if possible *
191 *****************************************************************/
198 typedef int LDBMCursor;
203 #include <sys/types.h>
204 #include <sys/stat.h>
208 #define LDBM_READER O_RDONLY
209 #define LDBM_WRITER O_RDWR
210 #define LDBM_WRCREAT (O_RDWR|O_CREAT)
211 #define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
214 #define LDBM_SUFFIX ".mdbm"
216 /* for ldbm_insert */
217 #define LDBM_INSERT MDBM_INSERT
218 #define LDBM_REPLACE MDBM_REPLACE
219 #define LDBM_SYNC 0x80000000
222 #elif defined( HAVE_NDBM )
224 /*****************************************************************
226 * if none of the above use ndbm, the standard unix thing *
228 *****************************************************************/
239 typedef int LDBMCursor;
245 #define LDBM_READER O_RDONLY
246 #define LDBM_WRITER O_WRONLY
247 #define LDBM_WRCREAT (O_RDWR|O_CREAT)
248 #define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
251 #define LDBM_SUFFIX ".ndbm"
253 /* for ldbm_insert */
254 #define LDBM_INSERT DBM_INSERT
255 #define LDBM_REPLACE DBM_REPLACE
262 int ldbm_initialize( void );
263 int ldbm_shutdown( void );
265 int ldbm_errno( LDBM ldbm );
266 LDBM ldbm_open( char *name, int rw, int mode, int dbcachesize );
267 void ldbm_close( LDBM ldbm );
268 void ldbm_sync( LDBM ldbm );
269 void ldbm_datum_free( LDBM ldbm, Datum data );
270 Datum ldbm_datum_dup( LDBM ldbm, Datum data );
271 Datum ldbm_fetch( LDBM ldbm, Datum key );
272 int ldbm_store( LDBM ldbm, Datum key, Datum data, int flags );
273 int ldbm_delete( LDBM ldbm, Datum key );
275 Datum ldbm_firstkey( LDBM ldbm, LDBMCursor **cursor );
276 Datum ldbm_nextkey( LDBM ldbm, Datum key, LDBMCursor *cursor );
278 /* initialization of Datum structures */
279 #ifdef HAVE_BERKELEY_DB2
280 void *ldbm_malloc( size_t size );
281 # define ldbm_datum_init(d) ((void)memset(&(d), 0, sizeof(Datum)))
283 # define ldbm_datum_init(d) ((void)0)
284 #endif /* HAVE_BERKELEY_DB2 */
288 #endif /* _ldbm_h_ */