3 * Copyright 1998-2003 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>
18 #include <ac/string.h>
20 /* dummy DB_ENV for non Berkeley DB */
21 #if !defined( LDBM_USE_DBBTREE ) && !defined( LDBM_USE_DBHASH )
25 #if defined( LDBM_USE_DBBTREE ) || defined( LDBM_USE_DBHASH )
27 /*****************************************************************
29 * use berkeley db btree or hash package *
31 *****************************************************************/
32 #include <sys/types.h>
46 #ifndef DB_VERSION_MAJOR
47 # define DB_VERSION_MAJOR 1
49 #ifndef DB_VERSION_MINOR
50 # define DB_VERSION_MINOR 85
53 #if DB_VERSION_MAJOR >= 2
54 # define R_NOOVERWRITE DB_NOOVERWRITE
55 # ifndef DEFAULT_DB_PAGE_SIZE
56 # define DEFAULT_DB_PAGE_SIZE 4096
73 #if DB_VERSION_MAJOR >= 2
74 typedef DBC LDBMCursor;
76 # define LDBM_READER DB_RDONLY
77 # define LDBM_WRITER 0x00000 /* hopefully */
78 # if defined( HAVE_BERKELEY_DB_THREAD )
79 # define LDBM_WRCREAT (DB_NOMMAP|DB_CREATE|DB_THREAD)
80 # define LDBM_NEWDB (DB_TRUNCATE|DB_CREATE|DB_THREAD)
82 # define LDBM_WRCREAT (DB_NOMMAP|DB_CREATE)
83 # define LDBM_NEWDB (DB_TRUNCATE|DB_CREATE)
87 typedef void LDBMCursor;
88 # define LDBM_READER O_RDONLY
89 # define LDBM_WRITER O_RDWR
90 # define LDBM_WRCREAT (O_RDWR|O_CREAT)
91 # define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
99 #define LDBM_LOCKING 0
100 #define LDBM_NOLOCKING 0
102 /* for ldbm_insert */
103 #define LDBM_INSERT R_NOOVERWRITE
104 #define LDBM_REPLACE 0
106 #ifdef LDBM_USE_DBBTREE
107 # define LDBM_ORDERED 1
108 # define LDBM_SUFFIX ".dbb"
109 # define DB_TYPE DB_BTREE
111 # define LDBM_SUFFIX ".dbh"
112 # define DB_TYPE DB_HASH
115 #elif defined( HAVE_GDBM )
117 /*****************************************************************
119 * use gdbm if possible *
121 *****************************************************************/
128 typedef Datum LDBMCursor;
129 typedef GDBM_FILE LDBM;
134 #define LDBM_READER GDBM_READER
135 #define LDBM_WRITER GDBM_WRITER
136 #define LDBM_WRCREAT GDBM_WRCREAT
137 #define LDBM_NEWDB GDBM_NEWDB
140 #define LDBM_NOSYNC GDBM_FAST
142 #define LDBM_NOSYNC 0
146 #define LDBM_SYNC GDBM_SYNC
151 #define LDBM_LOCKING 0
153 #define LDBM_NOLOCKING GDBM_NOLOCK
155 #define LDBM_NOLOCKING 0
158 #define LDBM_SUFFIX ".gdbm"
160 /* for ldbm_insert */
161 #define LDBM_INSERT GDBM_INSERT
162 #define LDBM_REPLACE GDBM_REPLACE
164 #elif defined( HAVE_MDBM )
166 /*****************************************************************
168 * use mdbm if possible *
170 *****************************************************************/
177 typedef int LDBMCursor;
182 #include <sys/types.h>
183 #include <sys/stat.h>
187 #define LDBM_READER O_RDONLY
188 #define LDBM_WRITER O_RDWR
189 #define LDBM_WRCREAT (O_RDWR|O_CREAT)
190 #define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
193 #define LDBM_NOSYNC 0
194 #define LDBM_LOCKING 0
195 #define LDBM_NOLOCKING 0
197 #define LDBM_SUFFIX ".mdbm"
199 /* for ldbm_insert */
200 #define LDBM_INSERT MDBM_INSERT
201 #define LDBM_REPLACE MDBM_REPLACE
203 #elif defined( HAVE_NDBM )
205 /*****************************************************************
207 * if none of the above use ndbm, the standard unix thing *
209 *****************************************************************/
220 typedef int LDBMCursor;
226 #define LDBM_READER O_RDONLY
227 #define LDBM_WRITER O_WRONLY
228 #define LDBM_WRCREAT (O_RDWR|O_CREAT)
229 #define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
231 #define LDBM_NOSYNC 0
233 #define LDBM_NOLOCK 0
236 #define LDBM_SUFFIX ".ndbm"
238 /* for ldbm_insert */
239 #define LDBM_INSERT DBM_INSERT
240 #define LDBM_REPLACE DBM_REPLACE
246 LDAP_LDBM_F (int) ldbm_initialize( const char * );
247 LDAP_LDBM_F (int) ldbm_shutdown( void );
249 LDAP_LDBM_F (DB_ENV*) ldbm_initialize_env(const char *, int dbcachesize, int *envdirok);
250 LDAP_LDBM_F (void) ldbm_shutdown_env(DB_ENV *);
252 LDAP_LDBM_F (int) ldbm_errno( LDBM ldbm );
253 LDAP_LDBM_F (LDBM) ldbm_open( DB_ENV *env, char *name, int rw, int mode, int dbcachesize );
254 LDAP_LDBM_F (void) ldbm_close( LDBM ldbm );
255 LDAP_LDBM_F (void) ldbm_sync( LDBM ldbm );
256 LDAP_LDBM_F (void) ldbm_datum_free( LDBM ldbm, Datum data );
257 LDAP_LDBM_F (Datum) ldbm_datum_dup( LDBM ldbm, Datum data );
258 LDAP_LDBM_F (Datum) ldbm_fetch( LDBM ldbm, Datum key );
259 LDAP_LDBM_F (int) ldbm_store( LDBM ldbm, Datum key, Datum data, int flags );
260 LDAP_LDBM_F (int) ldbm_delete( LDBM ldbm, Datum key );
262 LDAP_LDBM_F (Datum) ldbm_firstkey( LDBM ldbm, LDBMCursor **cursor );
263 LDAP_LDBM_F (Datum) ldbm_nextkey( LDBM ldbm, Datum key, LDBMCursor *cursor );
265 /* initialization of Datum structures */
266 #if defined( HAVE_BERKELEY_DB ) && (DB_VERSION_MAJOR >= 2)
267 LDAP_LDBM_F (void *) ldbm_malloc( size_t size );
268 # define ldbm_datum_init(d) ((void)memset(&(d), '\0', sizeof(Datum)))
270 # define ldbm_datum_init(d) ((void)0)
271 #endif /* HAVE_BERKELEY_DB */
275 #endif /* _ldbm_h_ */