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