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