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;
59 # define LDBM_READER DB_RDONLY
60 # define LDBM_WRITER 0x00000 /* hopefully */
61 # define LDBM_WRCREAT (DB_NOMMAP|DB_CREATE|DB_THREAD)
62 # define LDBM_NEWDB (DB_TRUNCATE|DB_CREATE|DB_THREAD)
64 typedef int LDBMCursor;
65 # define LDBM_READER O_RDONLY
66 # define LDBM_WRITER O_RDWR
67 # define LDBM_WRCREAT (O_RDWR|O_CREAT)
68 # define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
75 #define LDBM_SUFFIX ".dbb"
76 #define LDBM_ORDERED 1
79 #define LDBM_INSERT R_NOOVERWRITE
80 #define LDBM_REPLACE 0
81 #define LDBM_SYNC 0x80000000
83 #elif defined( LDBM_USE_DBHASH )
85 /*****************************************************************
87 * use berkeley db hash package *
89 *****************************************************************/
91 #include <sys/types.h>
104 # define R_NOOVERWRITE DB_NOOVERWRITE
105 # define DEFAULT_DB_PAGE_SIZE 1024
117 #define DB_TYPE DB_HASH
121 typedef DBC LDBMCursor;
122 # define LDBM_READER DB_RDONLY
123 # define LDBM_WRITER 0x00000 /* hopefully */
124 # define LDBM_WRCREAT (DB_NOMMAP|DB_CREATE|DB_THREAD)
125 # define LDBM_NEWDB (DB_TRUNCATE|DB_CREATE|DB_THREAD)
127 typedef int LDBMCursor;
128 # define LDBM_READER O_RDONLY
129 # define LDBM_WRITER O_RDWR
130 # define LDBM_WRCREAT (O_RDWR|O_CREAT)
131 # define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
137 #define LDBM_SUFFIX ".dbh"
139 /* for ldbm_insert */
140 #define LDBM_INSERT R_NOOVERWRITE
141 #define LDBM_REPLACE 0
142 #define LDBM_SYNC 0x80000000
144 #elif defined( HAVE_GDBM )
146 /*****************************************************************
148 * use gdbm if possible *
150 *****************************************************************/
157 typedef int LDBMCursor;
158 typedef GDBM_FILE LDBM;
160 extern gdbm_error gdbm_errno;
165 #define LDBM_READER GDBM_READER
166 #define LDBM_WRITER GDBM_WRITER
167 #define LDBM_WRCREAT GDBM_WRCREAT
168 #define LDBM_NEWDB GDBM_NEWDB
169 #define LDBM_FAST GDBM_FAST
171 #define LDBM_SUFFIX ".gdbm"
173 /* for ldbm_insert */
174 #define LDBM_INSERT GDBM_INSERT
175 #define LDBM_REPLACE GDBM_REPLACE
176 #define LDBM_SYNC 0x80000000
178 #elif defined( HAVE_MDBM )
180 /*****************************************************************
182 * use mdbm if possible *
184 *****************************************************************/
191 typedef int LDBMCursor;
196 #include <sys/types.h>
197 #include <sys/stat.h>
201 #define LDBM_READER O_RDONLY
202 #define LDBM_WRITER O_RDWR
203 #define LDBM_WRCREAT (O_RDWR|O_CREAT)
204 #define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
207 #define LDBM_SUFFIX ".mdbm"
209 /* for ldbm_insert */
210 #define LDBM_INSERT MDBM_INSERT
211 #define LDBM_REPLACE MDBM_REPLACE
212 #define LDBM_SYNC 0x80000000
215 #elif defined( HAVE_NDBM )
217 /*****************************************************************
219 * if none of the above use ndbm, the standard unix thing *
221 *****************************************************************/
232 typedef int LDBMCursor;
238 #define LDBM_READER O_RDONLY
239 #define LDBM_WRITER O_WRONLY
240 #define LDBM_WRCREAT (O_RDWR|O_CREAT)
241 #define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
244 #define LDBM_SUFFIX ".ndbm"
246 /* for ldbm_insert */
247 #define LDBM_INSERT DBM_INSERT
248 #define LDBM_REPLACE DBM_REPLACE
255 int ldbm_initialize( void );
256 int ldbm_shutdown( void );
258 int ldbm_errno( LDBM ldbm );
259 LDBM ldbm_open( char *name, int rw, int mode, int dbcachesize );
260 void ldbm_close( LDBM ldbm );
261 void ldbm_sync( LDBM ldbm );
262 void ldbm_datum_free( LDBM ldbm, Datum data );
263 Datum ldbm_datum_dup( LDBM ldbm, Datum data );
264 Datum ldbm_fetch( LDBM ldbm, Datum key );
265 int ldbm_store( LDBM ldbm, Datum key, Datum data, int flags );
266 int ldbm_delete( LDBM ldbm, Datum key );
268 Datum ldbm_firstkey( LDBM ldbm, LDBMCursor **cursor );
269 Datum ldbm_nextkey( LDBM ldbm, Datum key, LDBMCursor *cursor );
271 /* initialization of Datum structures */
272 #ifdef HAVE_BERKELEY_DB2
273 void *ldbm_malloc( size_t size );
274 # define ldbm_datum_init(d) ((void)memset(&(d), 0, sizeof(Datum)))
276 # define ldbm_datum_init(d) ((void)0)
277 #endif /* HAVE_BERKELEY_DB2 */
281 #endif /* _ldbm_h_ */