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