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 #if defined( LDBM_USE_DBBTREE ) || defined( LDBM_USE_DBHASH )
21 /*****************************************************************
23 * use berkeley db btree or hash package *
25 *****************************************************************/
26 #include <sys/types.h>
40 #ifndef DB_VERSION_MAJOR
41 # define DB_VERSION_MAJOR 1
43 #ifndef DB_VERSION_MINOR
44 # define DB_VERSION_MINOR 85
47 #if DB_VERSION_MAJOR >= 2
48 # define R_NOOVERWRITE DB_NOOVERWRITE
49 # ifndef DEFAULT_DB_PAGE_SIZE
50 # define DEFAULT_DB_PAGE_SIZE 4096
65 #if DB_VERSION_MAJOR >= 2
66 typedef DBC LDBMCursor;
68 # define LDBM_READER DB_RDONLY
69 # define LDBM_WRITER 0x00000 /* hopefully */
70 # if defined( HAVE_BERKELEY_DB_THREAD )
71 # define LDBM_WRCREAT (DB_NOMMAP|DB_CREATE|DB_THREAD)
72 # define LDBM_NEWDB (DB_TRUNCATE|DB_CREATE|DB_THREAD)
74 # define LDBM_WRCREAT (DB_NOMMAP|DB_CREATE)
75 # define LDBM_NEWDB (DB_TRUNCATE|DB_CREATE)
79 typedef void LDBMCursor;
80 # define LDBM_READER O_RDONLY
81 # define LDBM_WRITER O_RDWR
82 # define LDBM_WRCREAT (O_RDWR|O_CREAT)
83 # define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
91 #define LDBM_LOCKING 0
92 #define LDBM_NOLOCKING 0
95 #define LDBM_INSERT R_NOOVERWRITE
96 #define LDBM_REPLACE 0
98 #ifdef LDBM_USE_DBBTREE
99 # define LDBM_ORDERED 1
100 # define LDBM_SUFFIX ".dbb"
101 # define DB_TYPE DB_BTREE
103 # define LDBM_SUFFIX ".dbh"
104 # define DB_TYPE DB_HASH
107 #elif defined( HAVE_GDBM )
109 /*****************************************************************
111 * use gdbm if possible *
113 *****************************************************************/
120 typedef Datum LDBMCursor;
121 typedef GDBM_FILE LDBM;
123 extern gdbm_error gdbm_errno;
128 #define LDBM_READER GDBM_READER
129 #define LDBM_WRITER GDBM_WRITER
130 #define LDBM_WRCREAT GDBM_WRCREAT
131 #define LDBM_NEWDB GDBM_NEWDB
134 #define LDBM_NOSYNC GDBM_FAST
136 #define LDBM_NOSYNC 0
140 #define LDBM_SYNC GDBM_SYNC
145 #define LDBM_LOCKING 0
147 #define LDBM_NOLOCKING GDBM_NOLOCK
149 #define LDBM_NOLOCKING 0
152 #define LDBM_SUFFIX ".gdbm"
154 /* for ldbm_insert */
155 #define LDBM_INSERT GDBM_INSERT
156 #define LDBM_REPLACE GDBM_REPLACE
158 #elif defined( HAVE_MDBM )
160 /*****************************************************************
162 * use mdbm if possible *
164 *****************************************************************/
171 typedef int LDBMCursor;
176 #include <sys/types.h>
177 #include <sys/stat.h>
181 #define LDBM_READER O_RDONLY
182 #define LDBM_WRITER O_RDWR
183 #define LDBM_WRCREAT (O_RDWR|O_CREAT)
184 #define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
187 #define LDBM_NOSYNC 0
188 #define LDBM_LOCKING 0
189 #define LDBM_NOLOCKING 0
191 #define LDBM_SUFFIX ".mdbm"
193 /* for ldbm_insert */
194 #define LDBM_INSERT MDBM_INSERT
195 #define LDBM_REPLACE MDBM_REPLACE
197 #elif defined( HAVE_NDBM )
199 /*****************************************************************
201 * if none of the above use ndbm, the standard unix thing *
203 *****************************************************************/
214 typedef int LDBMCursor;
220 #define LDBM_READER O_RDONLY
221 #define LDBM_WRITER O_WRONLY
222 #define LDBM_WRCREAT (O_RDWR|O_CREAT)
223 #define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
225 #define LDBM_NOSYNC 0
227 #define LDBM_NOLOCK 0
230 #define LDBM_SUFFIX ".ndbm"
232 /* for ldbm_insert */
233 #define LDBM_INSERT DBM_INSERT
234 #define LDBM_REPLACE DBM_REPLACE
240 LDAP_LDBM_F (int) ldbm_initialize( const char * );
241 LDAP_LDBM_F (int) ldbm_shutdown( void );
243 LDAP_LDBM_F (int) ldbm_errno( LDBM ldbm );
244 LDAP_LDBM_F (LDBM) ldbm_open( char *name, int rw, int mode, int dbcachesize );
245 LDAP_LDBM_F (void) ldbm_close( LDBM ldbm );
246 LDAP_LDBM_F (void) ldbm_sync( LDBM ldbm );
247 LDAP_LDBM_F (void) ldbm_datum_free( LDBM ldbm, Datum data );
248 LDAP_LDBM_F (Datum) ldbm_datum_dup( LDBM ldbm, Datum data );
249 LDAP_LDBM_F (Datum) ldbm_fetch( LDBM ldbm, Datum key );
250 LDAP_LDBM_F (int) ldbm_store( LDBM ldbm, Datum key, Datum data, int flags );
251 LDAP_LDBM_F (int) ldbm_delete( LDBM ldbm, Datum key );
253 LDAP_LDBM_F (Datum) ldbm_firstkey( LDBM ldbm, LDBMCursor **cursor );
254 LDAP_LDBM_F (Datum) ldbm_nextkey( LDBM ldbm, Datum key, LDBMCursor *cursor );
256 /* initialization of Datum structures */
257 #if defined( HAVE_BERKELEY_DB ) && (DB_VERSION_MAJOR >= 2)
258 LDAP_LDBM_F (void *) ldbm_malloc( size_t size );
259 # define ldbm_datum_init(d) ((void)memset(&(d), '\0', sizeof(Datum)))
261 # define ldbm_datum_init(d) ((void)0)
262 #endif /* HAVE_BERKELEY_DB */
266 #endif /* _ldbm_h_ */