]> git.sur5r.net Git - openldap/blob - include/ldbm.h
cf5a75e4292d8d7d24f101a554248dac99208b24
[openldap] / include / ldbm.h
1 /* $OpenLDAP$ */
2 /*
3  * Copyright 1998,1999 The OpenLDAP Foundation, Redwood City, California, USA
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms are permitted only
7  * as authorized by the OpenLDAP Public License.  A copy of this
8  * license is available at http://www.OpenLDAP.org/license.html or
9  * in file LICENSE in the top-level directory of the distribution.
10  */
11 /* ldbm.h - ldap dbm compatibility routine header file */
12
13 #ifndef _LDBM_H_
14 #define _LDBM_H_
15
16 #include <ldap_cdefs.h>
17
18 #ifdef LDBM_USE_DBBTREE
19
20 /*****************************************************************
21  *                                                               *
22  * use berkeley db btree package                                 *
23  *                                                               *
24  *****************************************************************/
25
26 #include <sys/types.h>
27 #include <limits.h>
28 #include <fcntl.h>
29
30 #ifdef HAVE_DB_185_H
31 #       include <db_185.h>
32 #else
33 #       ifdef HAVE_DB1_DB_H
34 #               include <db1/db.h>
35 #       else
36 #               include <db.h>
37 #       endif
38 #       ifdef HAVE_BERKELEY_DB2
39 #               define R_NOOVERWRITE DB_NOOVERWRITE
40 #               define DEFAULT_DB_PAGE_SIZE 1024
41 #       endif
42 #endif
43
44
45 LDAP_BEGIN_DECL
46
47 typedef DBT     Datum;
48 #define dsize   size
49 #define dptr    data
50
51 typedef DB      *LDBM;
52
53
54 #define DB_TYPE         DB_BTREE
55
56 /* for ldbm_open */
57 #ifdef HAVE_BERKELEY_DB2
58 typedef DBC     LDBMCursor;
59
60 #       define LDBM_READER      DB_RDONLY
61 #       define LDBM_WRITER      0x00000      /* hopefully */
62 # ifdef HAVE_BERKELEY_DB2_DB_THREAD
63 #       define LDBM_WRCREAT     (DB_NOMMAP|DB_CREATE|DB_THREAD)
64 #       define LDBM_NEWDB       (DB_TRUNCATE|DB_CREATE|DB_THREAD)
65 # else
66 #       define LDBM_WRCREAT     (DB_NOMMAP|DB_CREATE|DB_THREAD)
67 #       define LDBM_NEWDB       (DB_TRUNCATE|DB_CREATE|DB_THREAD)
68 # endif
69
70 #else
71 typedef int LDBMCursor;
72 #       define LDBM_READER      O_RDONLY
73 #       define LDBM_WRITER      O_RDWR
74 #       define LDBM_WRCREAT     (O_RDWR|O_CREAT)
75 #       define LDBM_NEWDB       (O_RDWR|O_TRUNC|O_CREAT)
76 #endif
77
78 LDAP_END_DECL
79
80 #  define LDBM_FAST     0
81
82 #define LDBM_SUFFIX     ".dbb"
83 #define LDBM_ORDERED    1
84
85 /* for ldbm_insert */
86 #define LDBM_INSERT     R_NOOVERWRITE
87 #define LDBM_REPLACE    0
88 #define LDBM_SYNC       0x80000000
89
90 #elif defined( LDBM_USE_DBHASH )
91
92 /*****************************************************************
93  *                                                               *
94  * use berkeley db hash package                                  *
95  *                                                               *
96  *****************************************************************/
97
98 #include <sys/types.h>
99 #include <limits.h>
100 #include <fcntl.h>
101
102 #ifdef HAVE_DB_185_H
103 #       include <db_185.h>
104 #else
105 #       ifdef HAVE_DB1_DB_H
106 #               include <db1/db.h>
107 #       else
108 #               include <db.h>
109 #       endif
110 #       ifdef LDBM_USE_DB2
111 #               define R_NOOVERWRITE DB_NOOVERWRITE
112 #               define DEFAULT_DB_PAGE_SIZE 1024
113 #       endif
114 #endif
115
116 LDAP_BEGIN_DECL
117
118 typedef DBT     Datum;
119 #define dsize   size
120 #define dptr    data
121
122 typedef DB      *LDBM;
123
124 #define DB_TYPE         DB_HASH
125
126 /* for ldbm_open */
127 #ifdef LDBM_USE_DB2
128 typedef DBC     LDBMCursor;
129 #       define LDBM_READER      DB_RDONLY
130 #       define LDBM_WRITER      0x00000      /* hopefully */
131 #       define LDBM_WRCREAT     (DB_NOMMAP|DB_CREATE|DB_THREAD)
132 #       define LDBM_NEWDB       (DB_TRUNCATE|DB_CREATE|DB_THREAD)
133 #else
134 typedef int LDBMCursor;
135 #       define LDBM_READER      O_RDONLY
136 #       define LDBM_WRITER      O_RDWR
137 #       define LDBM_WRCREAT     (O_RDWR|O_CREAT)
138 #       define LDBM_NEWDB       (O_RDWR|O_TRUNC|O_CREAT)
139 #       define LDBM_FAST        0
140 #endif
141
142 LDAP_END_DECL
143
144 #define LDBM_SUFFIX     ".dbh"
145
146 /* for ldbm_insert */
147 #define LDBM_INSERT     R_NOOVERWRITE
148 #define LDBM_REPLACE    0
149 #define LDBM_SYNC       0x80000000
150
151 #elif defined( HAVE_GDBM )
152
153 /*****************************************************************
154  *                                                               *
155  * use gdbm if possible                                          *
156  *                                                               *
157  *****************************************************************/
158
159 #include <gdbm.h>
160
161 LDAP_BEGIN_DECL
162
163 typedef datum           Datum;
164 typedef int LDBMCursor;
165 typedef GDBM_FILE       LDBM;
166
167 extern gdbm_error       gdbm_errno;
168
169 LDAP_END_DECL
170
171 /* for ldbm_open */
172 #define LDBM_READER     GDBM_READER
173 #define LDBM_WRITER     GDBM_WRITER
174 #define LDBM_WRCREAT    GDBM_WRCREAT
175 #define LDBM_NEWDB      GDBM_NEWDB
176 #define LDBM_FAST       GDBM_FAST
177
178 #define LDBM_SUFFIX     ".gdbm"
179
180 /* for ldbm_insert */
181 #define LDBM_INSERT     GDBM_INSERT
182 #define LDBM_REPLACE    GDBM_REPLACE
183 #define LDBM_SYNC       0x80000000
184
185 #elif defined( HAVE_MDBM )
186
187 /*****************************************************************
188  *                                                               *
189  * use mdbm if possible                                          *
190  *                                                               *
191  *****************************************************************/
192
193 #include <mdbm.h>
194
195 LDAP_BEGIN_DECL
196
197 typedef datum           Datum;
198 typedef int LDBMCursor;
199 typedef MDBM            *LDBM;
200
201 LDAP_END_DECL
202     
203 #include <sys/types.h>
204 #include <sys/stat.h>
205 #include <fcntl.h>
206
207 /* for ldbm_open */
208 #define LDBM_READER     O_RDONLY
209 #define LDBM_WRITER     O_RDWR
210 #define LDBM_WRCREAT    (O_RDWR|O_CREAT)
211 #define LDBM_NEWDB      (O_RDWR|O_TRUNC|O_CREAT)
212 #define LDBM_FAST       0
213
214 #define LDBM_SUFFIX     ".mdbm"
215
216 /* for ldbm_insert */
217 #define LDBM_INSERT     MDBM_INSERT
218 #define LDBM_REPLACE    MDBM_REPLACE
219 #define LDBM_SYNC       0x80000000
220
221
222 #elif defined( HAVE_NDBM )
223
224 /*****************************************************************
225  *                                                               *
226  * if none of the above use ndbm, the standard unix thing        *
227  *                                                               *
228  *****************************************************************/
229
230 #include <ndbm.h>
231
232 #ifdef HAVE_FCNTL_H
233 #include <fcntl.h>
234 #endif
235
236 LDAP_BEGIN_DECL
237
238 typedef datum   Datum;
239 typedef int LDBMCursor;
240 typedef DBM     *LDBM;
241
242 LDAP_END_DECL
243
244 /* for ldbm_open */
245 #define LDBM_READER     O_RDONLY
246 #define LDBM_WRITER     O_WRONLY
247 #define LDBM_WRCREAT    (O_RDWR|O_CREAT)
248 #define LDBM_NEWDB      (O_RDWR|O_TRUNC|O_CREAT)
249 #define LDBM_FAST       0
250
251 #define LDBM_SUFFIX     ".ndbm"
252
253 /* for ldbm_insert */
254 #define LDBM_INSERT     DBM_INSERT
255 #define LDBM_REPLACE    DBM_REPLACE
256 #define LDBM_SYNC       0
257
258 #endif
259
260 LDAP_BEGIN_DECL
261
262 int ldbm_initialize( void );
263 int ldbm_shutdown( void );
264
265 int     ldbm_errno( LDBM ldbm );
266 LDBM    ldbm_open( char *name, int rw, int mode, int dbcachesize );
267 void    ldbm_close( LDBM ldbm );
268 void    ldbm_sync( LDBM ldbm );
269 void    ldbm_datum_free( LDBM ldbm, Datum data );
270 Datum   ldbm_datum_dup( LDBM ldbm, Datum data );
271 Datum   ldbm_fetch( LDBM ldbm, Datum key );
272 int     ldbm_store( LDBM ldbm, Datum key, Datum data, int flags );
273 int     ldbm_delete( LDBM ldbm, Datum key );
274
275 Datum   ldbm_firstkey( LDBM ldbm, LDBMCursor **cursor );
276 Datum   ldbm_nextkey( LDBM ldbm, Datum key, LDBMCursor *cursor );
277
278 /* initialization of Datum structures */
279 #ifdef HAVE_BERKELEY_DB2
280         void   *ldbm_malloc( size_t size );
281 #   define ldbm_datum_init(d) ((void)memset(&(d), 0, sizeof(Datum)))
282 #else
283 #   define ldbm_datum_init(d) ((void)0)
284 #endif  /* HAVE_BERKELEY_DB2 */
285
286 LDAP_END_DECL
287
288 #endif /* _ldbm_h_ */