3 * Copyright 1998-2000 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 *****************************************************************/
25 #include <sys/types.h>
39 #ifndef DB_VERSION_MAJOR
40 # define DB_VERSION_MAJOR 1
42 #ifndef DB_VERSION_MINOR
43 # define DB_VERSION_MINOR 85
46 #if DB_VERSION_MAJOR >= 2
47 # define R_NOOVERWRITE DB_NOOVERWRITE
48 # ifndef DEFAULT_DB_PAGE_SIZE
49 # define DEFAULT_DB_PAGE_SIZE 4096
64 #if DB_VERSION_MAJOR >= 2
65 typedef DBC LDBMCursor;
67 # define LDBM_READER DB_RDONLY
68 # define LDBM_WRITER 0x00000 /* hopefully */
69 # if defined( HAVE_BERKELEY_DB_THREAD )
70 # define LDBM_WRCREAT (DB_NOMMAP|DB_CREATE|DB_THREAD)
71 # define LDBM_NEWDB (DB_TRUNCATE|DB_CREATE|DB_THREAD)
73 # define LDBM_WRCREAT (DB_NOMMAP|DB_CREATE)
74 # define LDBM_NEWDB (DB_TRUNCATE|DB_CREATE)
78 typedef void LDBMCursor;
79 # define LDBM_READER O_RDONLY
80 # define LDBM_WRITER O_RDWR
81 # define LDBM_WRCREAT (O_RDWR|O_CREAT)
82 # define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
90 #define LDBM_LOCKING 0
91 #define LDBM_NOLOCKING 0
94 #define LDBM_INSERT R_NOOVERWRITE
95 #define LDBM_REPLACE 0
97 #ifdef LDBM_USE_DBBTREE
98 # define LDBM_ORDERED 1
99 # define LDBM_SUFFIX ".dbb"
100 # define DB_TYPE DB_BTREE
102 # define LDBM_SUFFIX ".dbh"
103 # define DB_TYPE DB_HASH
106 #elif defined( HAVE_GDBM )
108 /*****************************************************************
110 * use gdbm if possible *
112 *****************************************************************/
119 typedef Datum LDBMCursor;
120 typedef GDBM_FILE LDBM;
122 extern gdbm_error gdbm_errno;
127 #define LDBM_READER GDBM_READER
128 #define LDBM_WRITER GDBM_WRITER
129 #define LDBM_WRCREAT GDBM_WRCREAT
130 #define LDBM_NEWDB GDBM_NEWDB
133 #define LDBM_NOSYNC GDBM_FAST
135 #define LDBM_NOSYNC 0
139 #define LDBM_SYNC GDBM_SYNC
144 #define LDBM_LOCKING 0
146 #define LDBM_NOLOCKING GDBM_NOLOCK
148 #define LDBM_NOLOCKING 0
151 #define LDBM_SUFFIX ".gdbm"
153 /* for ldbm_insert */
154 #define LDBM_INSERT GDBM_INSERT
155 #define LDBM_REPLACE GDBM_REPLACE
157 #elif defined( HAVE_MDBM )
159 /*****************************************************************
161 * use mdbm if possible *
163 *****************************************************************/
170 typedef int LDBMCursor;
175 #include <sys/types.h>
176 #include <sys/stat.h>
180 #define LDBM_READER O_RDONLY
181 #define LDBM_WRITER O_RDWR
182 #define LDBM_WRCREAT (O_RDWR|O_CREAT)
183 #define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
186 #define LDBM_NOSYNC 0
187 #define LDBM_LOCKING 0
188 #define LDBM_NOLOCKING 0
190 #define LDBM_SUFFIX ".mdbm"
192 /* for ldbm_insert */
193 #define LDBM_INSERT MDBM_INSERT
194 #define LDBM_REPLACE MDBM_REPLACE
196 #elif defined( HAVE_NDBM )
198 /*****************************************************************
200 * if none of the above use ndbm, the standard unix thing *
202 *****************************************************************/
213 typedef int LDBMCursor;
219 #define LDBM_READER O_RDONLY
220 #define LDBM_WRITER O_WRONLY
221 #define LDBM_WRCREAT (O_RDWR|O_CREAT)
222 #define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
224 #define LDBM_NOSYNC 0
226 #define LDBM_NOLOCK 0
229 #define LDBM_SUFFIX ".ndbm"
231 /* for ldbm_insert */
232 #define LDBM_INSERT DBM_INSERT
233 #define LDBM_REPLACE DBM_REPLACE
239 LDAP_LDBM_F (int) ldbm_initialize( const char * );
240 LDAP_LDBM_F (int) ldbm_shutdown( void );
242 LDAP_LDBM_F (int) ldbm_errno( LDBM ldbm );
243 LDAP_LDBM_F (LDBM) ldbm_open( char *name, int rw, int mode, int dbcachesize );
244 LDAP_LDBM_F (void) ldbm_close( LDBM ldbm );
245 LDAP_LDBM_F (void) ldbm_sync( LDBM ldbm );
246 LDAP_LDBM_F (void) ldbm_datum_free( LDBM ldbm, Datum data );
247 LDAP_LDBM_F (Datum) ldbm_datum_dup( LDBM ldbm, Datum data );
248 LDAP_LDBM_F (Datum) ldbm_fetch( LDBM ldbm, Datum key );
249 LDAP_LDBM_F (int) ldbm_store( LDBM ldbm, Datum key, Datum data, int flags );
250 LDAP_LDBM_F (int) ldbm_delete( LDBM ldbm, Datum key );
252 LDAP_LDBM_F (Datum) ldbm_firstkey( LDBM ldbm, LDBMCursor **cursor );
253 LDAP_LDBM_F (Datum) ldbm_nextkey( LDBM ldbm, Datum key, LDBMCursor *cursor );
255 /* initialization of Datum structures */
256 #if defined( HAVE_BERKELEY_DB ) && (DB_VERSION_MAJOR >= 2)
257 LDAP_LDBM_F (void *) ldbm_malloc( size_t size );
258 # define ldbm_datum_init(d) ((void)memset(&(d), '\0', sizeof(Datum)))
260 # define ldbm_datum_init(d) ((void)0)
261 #endif /* HAVE_BERKELEY_DB */
265 #endif /* _ldbm_h_ */