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