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 # define DEFAULT_DB_PAGE_SIZE 1024
55 #ifdef HAVE_BERKELEY_DB2
56 typedef DBC LDBMCursor;
58 # define LDBM_READER DB_RDONLY
59 # define LDBM_WRITER 0x00000 /* hopefully */
60 # ifdef HAVE_BERKELEY_DB2_DB_THREAD
61 # define LDBM_WRCREAT (DB_NOMMAP|DB_CREATE|DB_THREAD)
62 # define LDBM_NEWDB (DB_TRUNCATE|DB_CREATE|DB_THREAD)
64 # define LDBM_WRCREAT (DB_NOMMAP|DB_CREATE)
65 # define LDBM_NEWDB (DB_TRUNCATE|DB_CREATE)
69 typedef void LDBMCursor;
70 # define LDBM_READER O_RDONLY
71 # define LDBM_WRITER O_RDWR
72 # define LDBM_WRCREAT (O_RDWR|O_CREAT)
73 # define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
81 #define LDBM_LOCKING 0
82 #define LDBM_NOLOCKING 0
85 #define LDBM_INSERT R_NOOVERWRITE
86 #define LDBM_REPLACE 0
88 #ifdef LDBM_USE_DBBTREE
89 # define LDBM_ORDERED 1
90 # define LDBM_SUFFIX ".dbb"
91 # define DB_TYPE DB_BTREE
93 # define LDBM_SUFFIX ".dbh"
94 # define DB_TYPE DB_HASH
97 #elif defined( HAVE_GDBM )
99 /*****************************************************************
101 * use gdbm if possible *
103 *****************************************************************/
110 typedef Datum LDBMCursor;
111 typedef GDBM_FILE LDBM;
113 extern gdbm_error gdbm_errno;
118 #define LDBM_READER GDBM_READER
119 #define LDBM_WRITER GDBM_WRITER
120 #define LDBM_WRCREAT GDBM_WRCREAT
121 #define LDBM_NEWDB GDBM_NEWDB
124 #define LDBM_NOSYNC GDBM_FAST
126 #define LDBM_NOSYNC 0
130 #define LDBM_SYNC GDBM_SYNC
135 #define LDBM_LOCKING 0
137 #define LDBM_NOLOCKING GDBM_NOLOCK
139 #define LDBM_NOLOCKING 0
142 #define LDBM_SUFFIX ".gdbm"
144 /* for ldbm_insert */
145 #define LDBM_INSERT GDBM_INSERT
146 #define LDBM_REPLACE GDBM_REPLACE
148 #elif defined( HAVE_MDBM )
150 /*****************************************************************
152 * use mdbm if possible *
154 *****************************************************************/
161 typedef int LDBMCursor;
166 #include <sys/types.h>
167 #include <sys/stat.h>
171 #define LDBM_READER O_RDONLY
172 #define LDBM_WRITER O_RDWR
173 #define LDBM_WRCREAT (O_RDWR|O_CREAT)
174 #define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
177 #define LDBM_NOSYNC 0
178 #define LDBM_LOCKING 0
179 #define LDBM_NOLOCKING 0
181 #define LDBM_SUFFIX ".mdbm"
183 /* for ldbm_insert */
184 #define LDBM_INSERT MDBM_INSERT
185 #define LDBM_REPLACE MDBM_REPLACE
187 #elif defined( HAVE_NDBM )
189 /*****************************************************************
191 * if none of the above use ndbm, the standard unix thing *
193 *****************************************************************/
204 typedef int LDBMCursor;
210 #define LDBM_READER O_RDONLY
211 #define LDBM_WRITER O_WRONLY
212 #define LDBM_WRCREAT (O_RDWR|O_CREAT)
213 #define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
215 #define LDBM_NOSYNC 0
217 #define LDBM_NOLOCK 0
220 #define LDBM_SUFFIX ".ndbm"
222 /* for ldbm_insert */
223 #define LDBM_INSERT DBM_INSERT
224 #define LDBM_REPLACE DBM_REPLACE
230 LIBLDBM_F (int) ldbm_initialize( void );
231 LIBLDBM_F (int) ldbm_shutdown( void );
233 LIBLDBM_F (int) ldbm_errno( LDBM ldbm );
234 LIBLDBM_F (LDBM) ldbm_open( char *name, int rw, int mode, int dbcachesize );
235 LIBLDBM_F (void) ldbm_close( LDBM ldbm );
236 LIBLDBM_F (void) ldbm_sync( LDBM ldbm );
237 LIBLDBM_F (void) ldbm_datum_free( LDBM ldbm, Datum data );
238 LIBLDBM_F (Datum) ldbm_datum_dup( LDBM ldbm, Datum data );
239 LIBLDBM_F (Datum) ldbm_fetch( LDBM ldbm, Datum key );
240 LIBLDBM_F (int) ldbm_store( LDBM ldbm, Datum key, Datum data, int flags );
241 LIBLDBM_F (int) ldbm_delete( LDBM ldbm, Datum key );
243 LIBLDBM_F (Datum) ldbm_firstkey( LDBM ldbm, LDBMCursor **cursor );
244 LIBLDBM_F (Datum) ldbm_nextkey( LDBM ldbm, Datum key, LDBMCursor *cursor );
246 /* initialization of Datum structures */
247 #ifdef HAVE_BERKELEY_DB2
248 LIBLDBM_F (void *) ldbm_malloc( size_t size );
249 # define ldbm_datum_init(d) ((void)memset(&(d), 0, sizeof(Datum)))
251 # define ldbm_datum_init(d) ((void)0)
252 #endif /* HAVE_BERKELEY_DB2 */
256 #endif /* _ldbm_h_ */