]> git.sur5r.net Git - openldap/blob - include/ldbm.h
Added MDBM support.
[openldap] / include / ldbm.h
1 /*
2  * Copyright 1998,1999 The OpenLDAP Foundation, Redwood City, California, USA
3  * All rights reserved.
4  *
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.
9  */
10 /* ldbm.h - ldap dbm compatibility routine header file */
11
12 #ifndef _LDBM_H_
13 #define _LDBM_H_
14
15 #include <ldap_cdefs.h>
16
17 #ifdef LDBM_USE_DBBTREE
18
19 /*****************************************************************
20  *                                                               *
21  * use berkeley db btree package                                 *
22  *                                                               *
23  *****************************************************************/
24
25 #include <sys/types.h>
26 #include <limits.h>
27 #include <fcntl.h>
28
29 #ifdef HAVE_DB_185_H
30 #       include <db_185.h>
31 #else
32 #       include <db.h>
33 #       ifdef HAVE_BERKELEY_DB2
34 #               define R_NOOVERWRITE DB_NOOVERWRITE
35 #               define DEFAULT_DB_PAGE_SIZE 1024
36 #       endif
37 #endif
38
39
40 LDAP_BEGIN_DECL
41
42 typedef DBT     Datum;
43 #define dsize   size
44 #define dptr    data
45
46 typedef DB      *LDBM;
47
48 LDAP_END_DECL
49
50 #define DB_TYPE         DB_BTREE
51
52 /* for ldbm_open */
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)
58 #else
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)
63 #endif
64
65 #  define LDBM_FAST     0
66
67 #define LDBM_SUFFIX     ".dbb"
68 #define LDBM_ORDERED    1
69
70 /* for ldbm_insert */
71 #define LDBM_INSERT     R_NOOVERWRITE
72 #define LDBM_REPLACE    0
73 #define LDBM_SYNC       0x80000000
74
75 #elif defined( LDBM_USE_DBHASH )
76
77 /*****************************************************************
78  *                                                               *
79  * use berkeley db hash package                                  *
80  *                                                               *
81  *****************************************************************/
82
83 #include <sys/types.h>
84 #include <limits.h>
85 #include <fcntl.h>
86
87 #ifdef HAVE_DB_185_H
88 #       include <db_185.h>
89 #else
90 #       include <db.h>
91 #       ifdef LDBM_USE_DB2
92 #               define R_NOOVERWRITE DB_NOOVERWRITE
93 #               define DEFAULT_DB_PAGE_SIZE 1024
94 #       endif
95 #endif
96
97 LDAP_BEGIN_DECL
98
99 typedef DBT     Datum;
100 #define dsize   size
101 #define dptr    data
102
103 typedef DB      *LDBM;
104
105 LDAP_END_DECL
106
107 #define DB_TYPE         DB_HASH
108
109 /* for ldbm_open */
110 #ifdef LDBM_USE_DB2
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)
115 #else
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)
120 #       define LDBM_FAST        0
121 #endif
122
123 #define LDBM_SUFFIX     ".dbh"
124
125 /* for ldbm_insert */
126 #define LDBM_INSERT     R_NOOVERWRITE
127 #define LDBM_REPLACE    0
128 #define LDBM_SYNC       0x80000000
129
130 #elif defined( HAVE_GDBM )
131
132 /*****************************************************************
133  *                                                               *
134  * use gdbm if possible                                          *
135  *                                                               *
136  *****************************************************************/
137
138 #include <gdbm.h>
139
140 LDAP_BEGIN_DECL
141
142 typedef datum           Datum;
143
144 typedef GDBM_FILE       LDBM;
145
146 extern gdbm_error       gdbm_errno;
147
148 LDAP_END_DECL
149
150 /* for ldbm_open */
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
156
157 #define LDBM_SUFFIX     ".gdbm"
158
159 /* for ldbm_insert */
160 #define LDBM_INSERT     GDBM_INSERT
161 #define LDBM_REPLACE    GDBM_REPLACE
162 #define LDBM_SYNC       0x80000000
163
164 #elif defined( HAVE_MDBM )
165
166
167 /*****************************************************************
168  *                                                               *
169  * use mdbm if possible                                          *
170  *                                                               *
171  *****************************************************************/
172
173 #include <mdbm.h>
174
175 LDAP_BEGIN_DECL
176
177 typedef datum           Datum;
178 typedef MDBM            *LDBM;
179
180 LDAP_END_DECL
181     
182 #include <sys/types.h>
183 #include <sys/stat.h>
184 #include <fcntl.h>
185
186 /* for ldbm_open */
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)
191 #define LDBM_FAST       0
192
193 #define LDBM_SUFFIX     ".mdbm"
194
195 /* for ldbm_insert */
196 #define LDBM_INSERT     MDBM_INSERT
197 #define LDBM_REPLACE    MDBM_REPLACE
198 #define LDBM_SYNC       0x80000000
199
200 #elif defined( HAVE_NDBM )
201
202 /*****************************************************************
203  *                                                               *
204  * if none of the above use ndbm, the standard unix thing        *
205  *                                                               *
206  *****************************************************************/
207
208 #include <ndbm.h>
209
210 #ifdef HAVE_FCNTL_H
211 #include <fcntl.h>
212 #endif
213
214 LDAP_BEGIN_DECL
215
216 typedef datum   Datum;
217
218 typedef DBM     *LDBM;
219
220 LDAP_END_DECL
221
222 /* for ldbm_open */
223 #define LDBM_READER     O_RDONLY
224 #define LDBM_WRITER     O_WRONLY
225 #define LDBM_WRCREAT    (O_RDWR|O_CREAT)
226 #define LDBM_NEWDB      (O_RDWR|O_TRUNC|O_CREAT)
227 #define LDBM_FAST       0
228
229 #define LDBM_SUFFIX     ".ndbm"
230
231 /* for ldbm_insert */
232 #define LDBM_INSERT     DBM_INSERT
233 #define LDBM_REPLACE    DBM_REPLACE
234 #define LDBM_SYNC       0
235
236 #endif
237
238 LDAP_BEGIN_DECL
239
240 void ldbm_initialize( void );
241 int     ldbm_errno( LDBM ldbm );
242 LDBM    ldbm_open( char *name, int rw, int mode, int dbcachesize );
243 void    ldbm_close( LDBM ldbm );
244 void    ldbm_sync( LDBM ldbm );
245 void    ldbm_datum_free( LDBM ldbm, Datum data );
246 Datum   ldbm_datum_dup( LDBM ldbm, Datum data );
247 Datum   ldbm_fetch( LDBM ldbm, Datum key );
248 int     ldbm_store( LDBM ldbm, Datum key, Datum data, int flags );
249 int     ldbm_delete( LDBM ldbm, Datum key );
250
251 #if HAVE_BERKELEY_DB2
252         void   *ldbm_malloc( size_t size );
253         Datum   ldbm_firstkey( LDBM ldbm, DBC **dbch );
254         Datum   ldbm_nextkey( LDBM ldbm, Datum key, DBC *dbcp );
255 #else
256         Datum   ldbm_firstkey( LDBM ldbm );
257         Datum   ldbm_nextkey( LDBM ldbm, Datum key );
258 #endif
259
260
261 /* initialization of Datum structures */
262 #ifdef HAVE_BERKELEY_DB2
263 #   define ldbm_datum_init(d) ((void)memset(&(d), 0, sizeof(Datum)))
264 #else
265 #   define ldbm_datum_init(d) ((void)0)
266 #endif  /* HAVE_BERKELEY_DB2 */
267
268 LDAP_END_DECL
269
270 #endif /* _ldbm_h_ */