2 * Copyright 1998,1999 The OpenLDAP Foundation, Redwood City, California, USA
5 * Redistribution and use in source and binary forms are permitted only
6 * as authorized by the OpenLDAP Public License. A copy of this
7 * license is available at http://www.OpenLDAP.org/license.html or
8 * in file LICENSE in the top-level directory of the distribution.
10 /* ldbm.h - ldap dbm compatibility routine header file */
15 #include <ldap_cdefs.h>
17 #ifdef LDBM_USE_DBBTREE
19 /*****************************************************************
21 * use berkeley db btree package *
23 *****************************************************************/
25 #include <sys/types.h>
33 # ifdef HAVE_BERKELEY_DB2
34 # define R_NOOVERWRITE DB_NOOVERWRITE
35 # define DEFAULT_DB_PAGE_SIZE 1024
50 #define DB_TYPE DB_BTREE
53 #ifdef HAVE_BERKELEY_DB2
54 # define LDBM_READER DB_RDONLY
55 # define LDBM_WRITER 0x00000 /* hopefully */
56 # define LDBM_WRCREAT (DB_NOMMAP|DB_CREATE|DB_THREAD)
57 # define LDBM_NEWDB (DB_TRUNCATE|DB_CREATE|DB_THREAD)
59 # define LDBM_READER O_RDONLY
60 # define LDBM_WRITER O_RDWR
61 # define LDBM_WRCREAT (O_RDWR|O_CREAT)
62 # define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
67 #define LDBM_SUFFIX ".dbb"
68 #define LDBM_ORDERED 1
71 #define LDBM_INSERT R_NOOVERWRITE
72 #define LDBM_REPLACE 0
73 #define LDBM_SYNC 0x80000000
75 #elif defined( LDBM_USE_DBHASH )
77 /*****************************************************************
79 * use berkeley db hash package *
81 *****************************************************************/
83 #include <sys/types.h>
92 # define R_NOOVERWRITE DB_NOOVERWRITE
93 # define DEFAULT_DB_PAGE_SIZE 1024
107 #define DB_TYPE DB_HASH
111 # define LDBM_READER DB_RDONLY
112 # define LDBM_WRITER 0x00000 /* hopefully */
113 # define LDBM_WRCREAT (DB_NOMMAP|DB_CREATE|DB_THREAD)
114 # define LDBM_NEWDB (DB_TRUNCATE|DB_CREATE|DB_THREAD)
116 # define LDBM_READER O_RDONLY
117 # define LDBM_WRITER O_RDWR
118 # define LDBM_WRCREAT (O_RDWR|O_CREAT)
119 # define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
123 #define LDBM_SUFFIX ".dbh"
125 /* for ldbm_insert */
126 #define LDBM_INSERT R_NOOVERWRITE
127 #define LDBM_REPLACE 0
128 #define LDBM_SYNC 0x80000000
130 #elif defined( HAVE_GDBM )
132 /*****************************************************************
134 * use gdbm if possible *
136 *****************************************************************/
144 typedef GDBM_FILE LDBM;
146 extern gdbm_error gdbm_errno;
151 #define LDBM_READER GDBM_READER
152 #define LDBM_WRITER GDBM_WRITER
153 #define LDBM_WRCREAT GDBM_WRCREAT
154 #define LDBM_NEWDB GDBM_NEWDB
155 #define LDBM_FAST GDBM_FAST
157 #define LDBM_SUFFIX ".gdbm"
159 /* for ldbm_insert */
160 #define LDBM_INSERT GDBM_INSERT
161 #define LDBM_REPLACE GDBM_REPLACE
162 #define LDBM_SYNC 0x80000000
165 #elif defined( HAVE_NDBM )
167 /*****************************************************************
169 * if none of the above use ndbm, the standard unix thing *
171 *****************************************************************/
188 #define LDBM_READER O_RDONLY
189 #define LDBM_WRITER O_WRONLY
190 #define LDBM_WRCREAT (O_RDWR|O_CREAT)
191 #define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
194 #define LDBM_SUFFIX ".ndbm"
196 /* for ldbm_insert */
197 #define LDBM_INSERT DBM_INSERT
198 #define LDBM_REPLACE DBM_REPLACE
205 int ldbm_initialize( void );
206 int ldbm_shutdown( void );
208 int ldbm_errno( LDBM ldbm );
209 LDBM ldbm_open( char *name, int rw, int mode, int dbcachesize );
210 void ldbm_close( LDBM ldbm );
211 void ldbm_sync( LDBM ldbm );
212 void ldbm_datum_free( LDBM ldbm, Datum data );
213 Datum ldbm_datum_dup( LDBM ldbm, Datum data );
214 Datum ldbm_fetch( LDBM ldbm, Datum key );
215 int ldbm_store( LDBM ldbm, Datum key, Datum data, int flags );
216 int ldbm_delete( LDBM ldbm, Datum key );
218 #if HAVE_BERKELEY_DB2
219 void *ldbm_malloc( size_t size );
220 Datum ldbm_firstkey( LDBM ldbm, DBC **dbch );
221 Datum ldbm_nextkey( LDBM ldbm, Datum key, DBC *dbcp );
223 Datum ldbm_firstkey( LDBM ldbm );
224 Datum ldbm_nextkey( LDBM ldbm, Datum key );
228 /* initialization of Datum structures */
229 #ifdef HAVE_BERKELEY_DB2
230 # define ldbm_datum_init(d) ((void)memset(&(d), 0, sizeof(Datum)))
232 # define ldbm_datum_init(d) ((void)0)
233 #endif /* HAVE_BERKELEY_DB2 */
237 #endif /* _ldbm_h_ */