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