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