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