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