3 * Copyright 1998-2001 The OpenLDAP Foundation, Redwood City, California, USA
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted only as authorized by the OpenLDAP
8 * Public License. A copy of this license is available at
9 * http://www.OpenLDAP.org/license.html or in file LICENSE in the
10 * top-level directory of the distribution.
12 /* ldbm.h - ldap dbm compatibility routine header file */
17 #include <ldap_cdefs.h>
19 /* dummy DB_ENV for non Berkeley DB */
20 #if !defined( LDBM_USE_DBBTREE ) && !defined( LDBM_USE_DBHASH )
24 #if defined( LDBM_USE_DBBTREE ) || defined( LDBM_USE_DBHASH )
26 /*****************************************************************
28 * use berkeley db btree or hash package *
30 *****************************************************************/
31 #include <sys/types.h>
45 #ifndef DB_VERSION_MAJOR
46 # define DB_VERSION_MAJOR 1
48 #ifndef DB_VERSION_MINOR
49 # define DB_VERSION_MINOR 85
52 #if DB_VERSION_MAJOR >= 2
53 # define R_NOOVERWRITE DB_NOOVERWRITE
54 # ifndef DEFAULT_DB_PAGE_SIZE
55 # define DEFAULT_DB_PAGE_SIZE 4096
72 #if DB_VERSION_MAJOR >= 2
73 typedef DBC LDBMCursor;
75 # define LDBM_READER DB_RDONLY
76 # define LDBM_WRITER 0x00000 /* hopefully */
77 # if defined( HAVE_BERKELEY_DB_THREAD )
78 # define LDBM_WRCREAT (DB_NOMMAP|DB_CREATE|DB_THREAD)
79 # define LDBM_NEWDB (DB_TRUNCATE|DB_CREATE|DB_THREAD)
81 # define LDBM_WRCREAT (DB_NOMMAP|DB_CREATE)
82 # define LDBM_NEWDB (DB_TRUNCATE|DB_CREATE)
86 typedef void LDBMCursor;
87 # define LDBM_READER O_RDONLY
88 # define LDBM_WRITER O_RDWR
89 # define LDBM_WRCREAT (O_RDWR|O_CREAT)
90 # define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
98 #define LDBM_LOCKING 0
99 #define LDBM_NOLOCKING 0
101 /* for ldbm_insert */
102 #define LDBM_INSERT R_NOOVERWRITE
103 #define LDBM_REPLACE 0
105 #ifdef LDBM_USE_DBBTREE
106 # define LDBM_ORDERED 1
107 # define LDBM_SUFFIX ".dbb"
108 # define DB_TYPE DB_BTREE
110 # define LDBM_SUFFIX ".dbh"
111 # define DB_TYPE DB_HASH
114 #elif defined( HAVE_GDBM )
116 /*****************************************************************
118 * use gdbm if possible *
120 *****************************************************************/
127 typedef Datum LDBMCursor;
128 typedef GDBM_FILE LDBM;
130 extern gdbm_error gdbm_errno;
135 #define LDBM_READER GDBM_READER
136 #define LDBM_WRITER GDBM_WRITER
137 #define LDBM_WRCREAT GDBM_WRCREAT
138 #define LDBM_NEWDB GDBM_NEWDB
141 #define LDBM_NOSYNC GDBM_FAST
143 #define LDBM_NOSYNC 0
147 #define LDBM_SYNC GDBM_SYNC
152 #define LDBM_LOCKING 0
154 #define LDBM_NOLOCKING GDBM_NOLOCK
156 #define LDBM_NOLOCKING 0
159 #define LDBM_SUFFIX ".gdbm"
161 /* for ldbm_insert */
162 #define LDBM_INSERT GDBM_INSERT
163 #define LDBM_REPLACE GDBM_REPLACE
165 #elif defined( HAVE_MDBM )
167 /*****************************************************************
169 * use mdbm if possible *
171 *****************************************************************/
178 typedef int LDBMCursor;
183 #include <sys/types.h>
184 #include <sys/stat.h>
188 #define LDBM_READER O_RDONLY
189 #define LDBM_WRITER O_RDWR
190 #define LDBM_WRCREAT (O_RDWR|O_CREAT)
191 #define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
194 #define LDBM_NOSYNC 0
195 #define LDBM_LOCKING 0
196 #define LDBM_NOLOCKING 0
198 #define LDBM_SUFFIX ".mdbm"
200 /* for ldbm_insert */
201 #define LDBM_INSERT MDBM_INSERT
202 #define LDBM_REPLACE MDBM_REPLACE
204 #elif defined( HAVE_NDBM )
206 /*****************************************************************
208 * if none of the above use ndbm, the standard unix thing *
210 *****************************************************************/
221 typedef int LDBMCursor;
227 #define LDBM_READER O_RDONLY
228 #define LDBM_WRITER O_WRONLY
229 #define LDBM_WRCREAT (O_RDWR|O_CREAT)
230 #define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
232 #define LDBM_NOSYNC 0
234 #define LDBM_NOLOCK 0
237 #define LDBM_SUFFIX ".ndbm"
239 /* for ldbm_insert */
240 #define LDBM_INSERT DBM_INSERT
241 #define LDBM_REPLACE DBM_REPLACE
247 LDAP_LDBM_F (int) ldbm_initialize( const char * );
248 LDAP_LDBM_F (int) ldbm_shutdown( void );
250 LDAP_LDBM_F (DB_ENV*) ldbm_initialize_env(const char *, int dbcachesize, int *envdirok);
251 LDAP_LDBM_F (void) ldbm_shutdown_env(DB_ENV *);
253 LDAP_LDBM_F (int) ldbm_errno( LDBM ldbm );
254 LDAP_LDBM_F (LDBM) ldbm_open( DB_ENV *env, char *name, int rw, int mode, int dbcachesize );
255 LDAP_LDBM_F (void) ldbm_close( LDBM ldbm );
256 LDAP_LDBM_F (void) ldbm_sync( LDBM ldbm );
257 LDAP_LDBM_F (void) ldbm_datum_free( LDBM ldbm, Datum data );
258 LDAP_LDBM_F (Datum) ldbm_datum_dup( LDBM ldbm, Datum data );
259 LDAP_LDBM_F (Datum) ldbm_fetch( LDBM ldbm, Datum key );
260 LDAP_LDBM_F (int) ldbm_store( LDBM ldbm, Datum key, Datum data, int flags );
261 LDAP_LDBM_F (int) ldbm_delete( LDBM ldbm, Datum key );
263 LDAP_LDBM_F (Datum) ldbm_firstkey( LDBM ldbm, LDBMCursor **cursor );
264 LDAP_LDBM_F (Datum) ldbm_nextkey( LDBM ldbm, Datum key, LDBMCursor *cursor );
266 /* initialization of Datum structures */
267 #if defined( HAVE_BERKELEY_DB ) && (DB_VERSION_MAJOR >= 2)
268 LDAP_LDBM_F (void *) ldbm_malloc( size_t size );
269 # define ldbm_datum_init(d) ((void)memset(&(d), '\0', sizeof(Datum)))
271 # define ldbm_datum_init(d) ((void)0)
272 #endif /* HAVE_BERKELEY_DB */
276 #endif /* _ldbm_h_ */