1 /* ldbm.h - ldap dbm compatibility routine header file */
3 /* This work is part of OpenLDAP Software <http://www.openldap.org/>.
5 * Copyright 1998-2004 The OpenLDAP Foundation.
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted only as authorized by the OpenLDAP
12 * A copy of this license is available in file LICENSE in the
13 * top-level directory of the distribution or, alternatively, at
14 * <http://www.OpenLDAP.org/license.html>.
20 #include <ldap_cdefs.h>
21 #include <ac/string.h>
23 /* dummy DB_ENV for non Berkeley DB */
24 #if !defined( LDBM_USE_DBBTREE ) && !defined( LDBM_USE_DBHASH )
28 #if defined( LDBM_USE_DBBTREE ) || defined( LDBM_USE_DBHASH )
30 /*****************************************************************
32 * use berkeley db btree or hash package *
34 *****************************************************************/
35 #include <sys/types.h>
49 #ifndef DB_VERSION_MAJOR
50 # define DB_VERSION_MAJOR 1
52 #ifndef DB_VERSION_MINOR
53 # define DB_VERSION_MINOR 85
56 #if DB_VERSION_MAJOR >= 2
57 # define R_NOOVERWRITE DB_NOOVERWRITE
58 # ifndef DEFAULT_DB_PAGE_SIZE
59 # define DEFAULT_DB_PAGE_SIZE 4096
76 #if DB_VERSION_MAJOR >= 2
77 typedef DBC LDBMCursor;
79 # define LDBM_READER DB_RDONLY
80 # define LDBM_WRITER 0x00000 /* hopefully */
81 # if defined( HAVE_BERKELEY_DB_THREAD )
82 # define LDBM_WRCREAT (DB_NOMMAP|DB_CREATE|DB_THREAD)
83 # define LDBM_NEWDB (DB_TRUNCATE|DB_CREATE|DB_THREAD)
85 # define LDBM_WRCREAT (DB_NOMMAP|DB_CREATE)
86 # define LDBM_NEWDB (DB_TRUNCATE|DB_CREATE)
90 typedef void LDBMCursor;
91 # define LDBM_READER O_RDONLY
92 # define LDBM_WRITER O_RDWR
93 # define LDBM_WRCREAT (O_RDWR|O_CREAT)
94 # define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
100 #define LDBM_NOSYNC 0
102 #define LDBM_LOCKING 0
103 #define LDBM_NOLOCKING 0
105 /* for ldbm_insert */
106 #define LDBM_INSERT R_NOOVERWRITE
107 #define LDBM_REPLACE 0
109 #ifdef LDBM_USE_DBBTREE
110 # define LDBM_ORDERED 1
111 # define LDBM_SUFFIX ".dbb"
112 # define DB_TYPE DB_BTREE
114 # define LDBM_SUFFIX ".dbh"
115 # define DB_TYPE DB_HASH
118 #elif defined( HAVE_GDBM )
120 /*****************************************************************
122 * use gdbm if possible *
124 *****************************************************************/
131 typedef Datum LDBMCursor;
132 typedef GDBM_FILE LDBM;
137 #define LDBM_READER GDBM_READER
138 #define LDBM_WRITER GDBM_WRITER
139 #define LDBM_WRCREAT GDBM_WRCREAT
140 #define LDBM_NEWDB GDBM_NEWDB
143 #define LDBM_NOSYNC GDBM_FAST
145 #define LDBM_NOSYNC 0
149 #define LDBM_SYNC GDBM_SYNC
154 #define LDBM_LOCKING 0
156 #define LDBM_NOLOCKING GDBM_NOLOCK
158 #define LDBM_NOLOCKING 0
161 #define LDBM_SUFFIX ".gdbm"
163 /* for ldbm_insert */
164 #define LDBM_INSERT GDBM_INSERT
165 #define LDBM_REPLACE GDBM_REPLACE
167 #elif defined( HAVE_MDBM )
169 /*****************************************************************
171 * use mdbm if possible *
173 *****************************************************************/
180 typedef int LDBMCursor;
185 #include <sys/types.h>
186 #include <sys/stat.h>
190 #define LDBM_READER O_RDONLY
191 #define LDBM_WRITER O_RDWR
192 #define LDBM_WRCREAT (O_RDWR|O_CREAT)
193 #define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
196 #define LDBM_NOSYNC 0
197 #define LDBM_LOCKING 0
198 #define LDBM_NOLOCKING 0
200 #define LDBM_SUFFIX ".mdbm"
202 /* for ldbm_insert */
203 #define LDBM_INSERT MDBM_INSERT
204 #define LDBM_REPLACE MDBM_REPLACE
206 #elif defined( HAVE_NDBM )
208 /*****************************************************************
210 * if none of the above use ndbm, the standard unix thing *
212 *****************************************************************/
223 typedef int LDBMCursor;
229 #define LDBM_READER O_RDONLY
230 #define LDBM_WRITER O_WRONLY
231 #define LDBM_WRCREAT (O_RDWR|O_CREAT)
232 #define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
234 #define LDBM_NOSYNC 0
236 #define LDBM_NOLOCK 0
239 #define LDBM_SUFFIX ".ndbm"
241 /* for ldbm_insert */
242 #define LDBM_INSERT DBM_INSERT
243 #define LDBM_REPLACE DBM_REPLACE
249 LDAP_LDBM_F (int) ldbm_initialize( const char * );
250 LDAP_LDBM_F (int) ldbm_shutdown( void );
252 LDAP_LDBM_F (DB_ENV*) ldbm_initialize_env(const char *, int dbcachesize, int *envdirok);
253 LDAP_LDBM_F (void) ldbm_shutdown_env(DB_ENV *);
255 LDAP_LDBM_F (int) ldbm_errno( LDBM ldbm );
256 LDAP_LDBM_F (LDBM) ldbm_open( DB_ENV *env, char *name, int rw, int mode, int dbcachesize );
257 LDAP_LDBM_F (void) ldbm_close( LDBM ldbm );
258 LDAP_LDBM_F (void) ldbm_sync( LDBM ldbm );
259 LDAP_LDBM_F (void) ldbm_datum_free( LDBM ldbm, Datum data );
260 LDAP_LDBM_F (Datum) ldbm_datum_dup( LDBM ldbm, Datum data );
261 LDAP_LDBM_F (Datum) ldbm_fetch( LDBM ldbm, Datum key );
262 LDAP_LDBM_F (int) ldbm_store( LDBM ldbm, Datum key, Datum data, int flags );
263 LDAP_LDBM_F (int) ldbm_delete( LDBM ldbm, Datum key );
265 LDAP_LDBM_F (Datum) ldbm_firstkey( LDBM ldbm, LDBMCursor **cursor );
266 LDAP_LDBM_F (Datum) ldbm_nextkey( LDBM ldbm, Datum key, LDBMCursor *cursor );
268 /* initialization of Datum structures */
269 #if defined( HAVE_BERKELEY_DB ) && (DB_VERSION_MAJOR >= 2)
270 LDAP_LDBM_F (void *) ldbm_malloc( size_t size );
271 # define ldbm_datum_init(d) ((void)memset(&(d), '\0', sizeof(Datum)))
273 # define ldbm_datum_init(d) ((void)0)
274 #endif /* HAVE_BERKELEY_DB */
278 #endif /* _ldbm_h_ */