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