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
53 #define DB_TYPE DB_BTREE
56 #ifdef HAVE_BERKELEY_DB2
57 typedef DBC LDBMCursor;
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 typedef int LDBMCursor;
64 # define LDBM_READER O_RDONLY
65 # define LDBM_WRITER O_RDWR
66 # define LDBM_WRCREAT (O_RDWR|O_CREAT)
67 # define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
74 #define LDBM_SUFFIX ".dbb"
75 #define LDBM_ORDERED 1
78 #define LDBM_INSERT R_NOOVERWRITE
79 #define LDBM_REPLACE 0
80 #define LDBM_SYNC 0x80000000
82 #elif defined( LDBM_USE_DBHASH )
84 /*****************************************************************
86 * use berkeley db hash package *
88 *****************************************************************/
90 #include <sys/types.h>
103 # define R_NOOVERWRITE DB_NOOVERWRITE
104 # define DEFAULT_DB_PAGE_SIZE 1024
116 #define DB_TYPE DB_HASH
120 typedef DBC LDBMCursor;
121 # define LDBM_READER DB_RDONLY
122 # define LDBM_WRITER 0x00000 /* hopefully */
123 # define LDBM_WRCREAT (DB_NOMMAP|DB_CREATE|DB_THREAD)
124 # define LDBM_NEWDB (DB_TRUNCATE|DB_CREATE|DB_THREAD)
126 typedef int LDBMCursor;
127 # define LDBM_READER O_RDONLY
128 # define LDBM_WRITER O_RDWR
129 # define LDBM_WRCREAT (O_RDWR|O_CREAT)
130 # define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
136 #define LDBM_SUFFIX ".dbh"
138 /* for ldbm_insert */
139 #define LDBM_INSERT R_NOOVERWRITE
140 #define LDBM_REPLACE 0
141 #define LDBM_SYNC 0x80000000
143 #elif defined( HAVE_GDBM )
145 /*****************************************************************
147 * use gdbm if possible *
149 *****************************************************************/
156 typedef int LDBMCursor;
157 typedef GDBM_FILE LDBM;
159 extern gdbm_error gdbm_errno;
164 #define LDBM_READER GDBM_READER
165 #define LDBM_WRITER GDBM_WRITER
166 #define LDBM_WRCREAT GDBM_WRCREAT
167 #define LDBM_NEWDB GDBM_NEWDB
168 #define LDBM_FAST GDBM_FAST
170 #define LDBM_SUFFIX ".gdbm"
172 /* for ldbm_insert */
173 #define LDBM_INSERT GDBM_INSERT
174 #define LDBM_REPLACE GDBM_REPLACE
175 #define LDBM_SYNC 0x80000000
177 #elif defined( HAVE_MDBM )
179 /*****************************************************************
181 * use mdbm if possible *
183 *****************************************************************/
190 typedef int LDBMCursor;
195 #include <sys/types.h>
196 #include <sys/stat.h>
200 #define LDBM_READER O_RDONLY
201 #define LDBM_WRITER O_RDWR
202 #define LDBM_WRCREAT (O_RDWR|O_CREAT)
203 #define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
206 #define LDBM_SUFFIX ".mdbm"
208 /* for ldbm_insert */
209 #define LDBM_INSERT MDBM_INSERT
210 #define LDBM_REPLACE MDBM_REPLACE
211 #define LDBM_SYNC 0x80000000
214 #elif defined( HAVE_NDBM )
216 /*****************************************************************
218 * if none of the above use ndbm, the standard unix thing *
220 *****************************************************************/
231 typedef int LDBMCursor;
237 #define LDBM_READER O_RDONLY
238 #define LDBM_WRITER O_WRONLY
239 #define LDBM_WRCREAT (O_RDWR|O_CREAT)
240 #define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
243 #define LDBM_SUFFIX ".ndbm"
245 /* for ldbm_insert */
246 #define LDBM_INSERT DBM_INSERT
247 #define LDBM_REPLACE DBM_REPLACE
254 int ldbm_initialize( void );
255 int ldbm_shutdown( void );
257 int ldbm_errno( LDBM ldbm );
258 LDBM ldbm_open( char *name, int rw, int mode, int dbcachesize );
259 void ldbm_close( LDBM ldbm );
260 void ldbm_sync( LDBM ldbm );
261 void ldbm_datum_free( LDBM ldbm, Datum data );
262 Datum ldbm_datum_dup( LDBM ldbm, Datum data );
263 Datum ldbm_fetch( LDBM ldbm, Datum key );
264 int ldbm_store( LDBM ldbm, Datum key, Datum data, int flags );
265 int ldbm_delete( LDBM ldbm, Datum key );
267 Datum ldbm_firstkey( LDBM ldbm, LDBMCursor **cursor );
268 Datum ldbm_nextkey( LDBM ldbm, Datum key, LDBMCursor *cursor );
270 /* initialization of Datum structures */
271 #ifdef HAVE_BERKELEY_DB2
272 void *ldbm_malloc( size_t size );
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_ */