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