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 #ifdef LDBM_USE_DBBTREE
17 /*****************************************************************
19 * use berkeley db btree package *
21 *****************************************************************/
23 #include <sys/types.h>
31 # ifdef HAVE_BERKELEY_DB2
32 # define R_NOOVERWRITE DB_NOOVERWRITE
33 # define DEFAULT_DB_PAGE_SIZE 1024
44 #define DB_TYPE DB_BTREE
47 #ifdef HAVE_BERKELEY_DB2
48 # define LDBM_READER DB_RDONLY
49 # define LDBM_WRITER 0x00000 /* hopefully */
50 # define LDBM_WRCREAT (DB_NOMMAP|DB_CREATE|DB_THREAD)
51 # define LDBM_NEWDB (DB_TRUNCATE|DB_CREATE|DB_THREAD)
53 # define LDBM_READER O_RDONLY
54 # define LDBM_WRITER O_RDWR
55 # define LDBM_WRCREAT (O_RDWR|O_CREAT)
56 # define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
61 #define LDBM_SUFFIX ".dbb"
62 #define LDBM_ORDERED 1
65 #define LDBM_INSERT R_NOOVERWRITE
66 #define LDBM_REPLACE 0
67 #define LDBM_SYNC 0x80000000
69 #elif defined( LDBM_USE_DBHASH )
71 /*****************************************************************
73 * use berkeley db hash package *
75 *****************************************************************/
77 #include <sys/types.h>
86 # define R_NOOVERWRITE DB_NOOVERWRITE
87 # define DEFAULT_DB_PAGE_SIZE 1024
97 #define DB_TYPE DB_HASH
101 # define LDBM_READER DB_RDONLY
102 # define LDBM_WRITER 0x00000 /* hopefully */
103 # define LDBM_WRCREAT (DB_NOMMAP|DB_CREATE|DB_THREAD)
104 # define LDBM_NEWDB (DB_TRUNCATE|DB_CREATE|DB_THREAD)
106 # define LDBM_READER O_RDONLY
107 # define LDBM_WRITER O_RDWR
108 # define LDBM_WRCREAT (O_RDWR|O_CREAT)
109 # define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
113 #define LDBM_SUFFIX ".dbh"
115 /* for ldbm_insert */
116 #define LDBM_INSERT R_NOOVERWRITE
117 #define LDBM_REPLACE 0
118 #define LDBM_SYNC 0x80000000
120 #elif defined( HAVE_GDBM )
122 /*****************************************************************
124 * use gdbm if possible *
126 *****************************************************************/
132 typedef GDBM_FILE LDBM;
134 extern gdbm_error gdbm_errno;
137 #define LDBM_READER GDBM_READER
138 #define LDBM_WRITER GDBM_WRITER
139 #define LDBM_WRCREAT GDBM_WRCREAT
140 #define LDBM_NEWDB GDBM_NEWDB
141 #define LDBM_FAST GDBM_FAST
143 #define LDBM_SUFFIX ".gdbm"
145 /* for ldbm_insert */
146 #define LDBM_INSERT GDBM_INSERT
147 #define LDBM_REPLACE GDBM_REPLACE
148 #define LDBM_SYNC 0x80000000
151 #elif defined( HAVE_NDBM )
153 /*****************************************************************
155 * if none of the above use ndbm, the standard unix thing *
157 *****************************************************************/
170 #define LDBM_READER O_RDONLY
171 #define LDBM_WRITER O_WRONLY
172 #define LDBM_WRCREAT (O_RDWR|O_CREAT)
173 #define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
176 #define LDBM_SUFFIX ".ndbm"
178 /* for ldbm_insert */
179 #define LDBM_INSERT DBM_INSERT
180 #define LDBM_REPLACE DBM_REPLACE
185 int ldbm_errno( LDBM ldbm );
186 LDBM ldbm_open( char *name, int rw, int mode, int dbcachesize );
187 void ldbm_close( LDBM ldbm );
188 void ldbm_sync( LDBM ldbm );
189 void ldbm_datum_free( LDBM ldbm, Datum data );
190 Datum ldbm_datum_dup( LDBM ldbm, Datum data );
191 Datum ldbm_fetch( LDBM ldbm, Datum key );
192 int ldbm_store( LDBM ldbm, Datum key, Datum data, int flags );
193 int ldbm_delete( LDBM ldbm, Datum key );
195 #if HAVE_BERKELEY_DB2
196 void *ldbm_malloc( size_t size );
197 Datum ldbm_firstkey( LDBM ldbm, DBC **dbch );
198 Datum ldbm_nextkey( LDBM ldbm, Datum key, DBC *dbcp );
200 Datum ldbm_firstkey( LDBM ldbm );
201 Datum ldbm_nextkey( LDBM ldbm, Datum key );
205 /* initialization of Datum structures */
206 #ifdef HAVE_BERKELEY_DB2
208 # define ldbm_datum_init(d) ((void)memset(&(d), 0, sizeof(Datum)))
212 # define ldbm_datum_init(d) ((void)0)
214 #endif /* HAVE_BERKELEY_DB2 */
216 #endif /* _ldbm_h_ */