]> git.sur5r.net Git - openldap/blob - include/ldbm.h
Add ber_bvstr and ber_bvstrdup string to berval allocators.
[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 #endif
139
140 #define LDBM_SUFFIX     ".gdbm"
141
142 /* for ldbm_insert */
143 #define LDBM_INSERT     GDBM_INSERT
144 #define LDBM_REPLACE    GDBM_REPLACE
145
146 #elif defined( HAVE_MDBM )
147
148 /*****************************************************************
149  *                                                               *
150  * use mdbm if possible                                          *
151  *                                                               *
152  *****************************************************************/
153
154 #include <mdbm.h>
155
156 LDAP_BEGIN_DECL
157
158 typedef datum           Datum;
159 typedef int LDBMCursor;
160 typedef MDBM            *LDBM;
161
162 LDAP_END_DECL
163     
164 #include <sys/types.h>
165 #include <sys/stat.h>
166 #include <fcntl.h>
167
168 /* for ldbm_open */
169 #define LDBM_READER     O_RDONLY
170 #define LDBM_WRITER     O_RDWR
171 #define LDBM_WRCREAT    (O_RDWR|O_CREAT)
172 #define LDBM_NEWDB      (O_RDWR|O_TRUNC|O_CREAT)
173
174 #define LDBM_SYNC       0
175 #define LDBM_NOSYNC     0
176 #define LDBM_LOCKING    0
177 #define LDBM_NOLOCKING  0
178
179 #define LDBM_SUFFIX     ".mdbm"
180
181 /* for ldbm_insert */
182 #define LDBM_INSERT     MDBM_INSERT
183 #define LDBM_REPLACE    MDBM_REPLACE
184
185 #elif defined( HAVE_NDBM )
186
187 /*****************************************************************
188  *                                                               *
189  * if none of the above use ndbm, the standard unix thing        *
190  *                                                               *
191  *****************************************************************/
192
193 #include <ndbm.h>
194
195 #ifdef HAVE_FCNTL_H
196 #include <fcntl.h>
197 #endif
198
199 LDAP_BEGIN_DECL
200
201 typedef datum   Datum;
202 typedef int LDBMCursor;
203 typedef DBM     *LDBM;
204
205 LDAP_END_DECL
206
207 /* for ldbm_open */
208 #define LDBM_READER     O_RDONLY
209 #define LDBM_WRITER     O_WRONLY
210 #define LDBM_WRCREAT    (O_RDWR|O_CREAT)
211 #define LDBM_NEWDB      (O_RDWR|O_TRUNC|O_CREAT)
212
213 #define LDBM_NOSYNC     0
214 #define LDBM_SYNC       0
215 #define LDBM_NOLOCK     0
216 #define LDBM_SYNC       0
217
218 #define LDBM_SUFFIX     ".ndbm"
219
220 /* for ldbm_insert */
221 #define LDBM_INSERT     DBM_INSERT
222 #define LDBM_REPLACE    DBM_REPLACE
223
224 #endif
225
226 LDAP_BEGIN_DECL
227
228 LIBLDBM_F (int) ldbm_initialize( void );
229 LIBLDBM_F (int) ldbm_shutdown( void );
230
231 LIBLDBM_F (int) ldbm_errno( LDBM ldbm );
232 LIBLDBM_F (LDBM) ldbm_open( char *name, int rw, int mode, int dbcachesize );
233 LIBLDBM_F (void) ldbm_close( LDBM ldbm );
234 LIBLDBM_F (void) ldbm_sync( LDBM ldbm );
235 LIBLDBM_F (void) ldbm_datum_free( LDBM ldbm, Datum data );
236 LIBLDBM_F (Datum) ldbm_datum_dup( LDBM ldbm, Datum data );
237 LIBLDBM_F (Datum) ldbm_fetch( LDBM ldbm, Datum key );
238 LIBLDBM_F (int) ldbm_store( LDBM ldbm, Datum key, Datum data, int flags );
239 LIBLDBM_F (int) ldbm_delete( LDBM ldbm, Datum key );
240
241 LIBLDBM_F (Datum) ldbm_firstkey( LDBM ldbm, LDBMCursor **cursor );
242 LIBLDBM_F (Datum) ldbm_nextkey( LDBM ldbm, Datum key, LDBMCursor *cursor );
243
244 /* initialization of Datum structures */
245 #ifdef HAVE_BERKELEY_DB2
246         LIBLDBM_F (void *) ldbm_malloc( size_t size );
247 #   define ldbm_datum_init(d) ((void)memset(&(d), 0, sizeof(Datum)))
248 #else
249 #   define ldbm_datum_init(d) ((void)0)
250 #endif  /* HAVE_BERKELEY_DB2 */
251
252 LDAP_END_DECL
253
254 #endif /* _ldbm_h_ */