]> git.sur5r.net Git - openldap/blob - include/ldbm.h
Introduction of a backend startup/shutdown function to make backend-specific
[openldap] / include / ldbm.h
1 /*
2  * Copyright 1998,1999 The OpenLDAP Foundation, Redwood City, California, USA
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms are permitted only
6  * as authorized by the OpenLDAP Public License.  A copy of this
7  * license is available at http://www.OpenLDAP.org/license.html or
8  * in file LICENSE in the top-level directory of the distribution.
9  */
10 /* ldbm.h - ldap dbm compatibility routine header file */
11
12 #ifndef _LDBM_H_
13 #define _LDBM_H_
14
15 #include <ldap_cdefs.h>
16
17 #ifdef LDBM_USE_DBBTREE
18
19 /*****************************************************************
20  *                                                               *
21  * use berkeley db btree package                                 *
22  *                                                               *
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 #else
32 #       include <db.h>
33 #       ifdef HAVE_BERKELEY_DB2
34 #               define R_NOOVERWRITE DB_NOOVERWRITE
35 #               define DEFAULT_DB_PAGE_SIZE 1024
36 #       endif
37 #endif
38
39
40 LDAP_BEGIN_DECL
41
42 typedef DBT     Datum;
43 #define dsize   size
44 #define dptr    data
45
46 typedef DB      *LDBM;
47
48 LDAP_END_DECL
49
50 #define DB_TYPE         DB_BTREE
51
52 /* for ldbm_open */
53 #ifdef HAVE_BERKELEY_DB2
54 #       define LDBM_READER      DB_RDONLY
55 #       define LDBM_WRITER      0x00000      /* hopefully */
56 #       define LDBM_WRCREAT     (DB_NOMMAP|DB_CREATE|DB_THREAD)
57 #       define LDBM_NEWDB       (DB_TRUNCATE|DB_CREATE|DB_THREAD)
58 #else
59 #       define LDBM_READER      O_RDONLY
60 #       define LDBM_WRITER      O_RDWR
61 #       define LDBM_WRCREAT     (O_RDWR|O_CREAT)
62 #       define LDBM_NEWDB       (O_RDWR|O_TRUNC|O_CREAT)
63 #endif
64
65 #  define LDBM_FAST     0
66
67 #define LDBM_SUFFIX     ".dbb"
68 #define LDBM_ORDERED    1
69
70 /* for ldbm_insert */
71 #define LDBM_INSERT     R_NOOVERWRITE
72 #define LDBM_REPLACE    0
73 #define LDBM_SYNC       0x80000000
74
75 #elif defined( LDBM_USE_DBHASH )
76
77 /*****************************************************************
78  *                                                               *
79  * use berkeley db hash package                                  *
80  *                                                               *
81  *****************************************************************/
82
83 #include <sys/types.h>
84 #include <limits.h>
85 #include <fcntl.h>
86
87 #ifdef HAVE_DB_185_H
88 #       include <db_185.h>
89 #else
90 #       include <db.h>
91 #       ifdef LDBM_USE_DB2
92 #               define R_NOOVERWRITE DB_NOOVERWRITE
93 #               define DEFAULT_DB_PAGE_SIZE 1024
94 #       endif
95 #endif
96
97 LDAP_BEGIN_DECL
98
99 typedef DBT     Datum;
100 #define dsize   size
101 #define dptr    data
102
103 typedef DB      *LDBM;
104
105 LDAP_END_DECL
106
107 #define DB_TYPE         DB_HASH
108
109 /* for ldbm_open */
110 #ifdef LDBM_USE_DB2
111 #       define LDBM_READER      DB_RDONLY
112 #       define LDBM_WRITER      0x00000      /* hopefully */
113 #       define LDBM_WRCREAT     (DB_NOMMAP|DB_CREATE|DB_THREAD)
114 #       define LDBM_NEWDB       (DB_TRUNCATE|DB_CREATE|DB_THREAD)
115 #else
116 #       define LDBM_READER      O_RDONLY
117 #       define LDBM_WRITER      O_RDWR
118 #       define LDBM_WRCREAT     (O_RDWR|O_CREAT)
119 #       define LDBM_NEWDB       (O_RDWR|O_TRUNC|O_CREAT)
120 #       define LDBM_FAST        0
121 #endif
122
123 #define LDBM_SUFFIX     ".dbh"
124
125 /* for ldbm_insert */
126 #define LDBM_INSERT     R_NOOVERWRITE
127 #define LDBM_REPLACE    0
128 #define LDBM_SYNC       0x80000000
129
130 #elif defined( HAVE_GDBM )
131
132 /*****************************************************************
133  *                                                               *
134  * use gdbm if possible                                          *
135  *                                                               *
136  *****************************************************************/
137
138 #include <gdbm.h>
139
140 LDAP_BEGIN_DECL
141
142 typedef datum           Datum;
143
144 typedef GDBM_FILE       LDBM;
145
146 extern gdbm_error       gdbm_errno;
147
148 LDAP_END_DECL
149
150 /* for ldbm_open */
151 #define LDBM_READER     GDBM_READER
152 #define LDBM_WRITER     GDBM_WRITER
153 #define LDBM_WRCREAT    GDBM_WRCREAT
154 #define LDBM_NEWDB      GDBM_NEWDB
155 #define LDBM_FAST       GDBM_FAST
156
157 #define LDBM_SUFFIX     ".gdbm"
158
159 /* for ldbm_insert */
160 #define LDBM_INSERT     GDBM_INSERT
161 #define LDBM_REPLACE    GDBM_REPLACE
162 #define LDBM_SYNC       0x80000000
163
164
165 #elif defined( HAVE_NDBM )
166
167 /*****************************************************************
168  *                                                               *
169  * if none of the above use ndbm, the standard unix thing        *
170  *                                                               *
171  *****************************************************************/
172
173 #include <ndbm.h>
174
175 #ifdef HAVE_FCNTL_H
176 #include <fcntl.h>
177 #endif
178
179 LDAP_BEGIN_DECL
180
181 typedef datum   Datum;
182
183 typedef DBM     *LDBM;
184
185 LDAP_END_DECL
186
187 /* for ldbm_open */
188 #define LDBM_READER     O_RDONLY
189 #define LDBM_WRITER     O_WRONLY
190 #define LDBM_WRCREAT    (O_RDWR|O_CREAT)
191 #define LDBM_NEWDB      (O_RDWR|O_TRUNC|O_CREAT)
192 #define LDBM_FAST       0
193
194 #define LDBM_SUFFIX     ".ndbm"
195
196 /* for ldbm_insert */
197 #define LDBM_INSERT     DBM_INSERT
198 #define LDBM_REPLACE    DBM_REPLACE
199 #define LDBM_SYNC       0
200
201 #endif
202
203 LDAP_BEGIN_DECL
204
205 int             ldbm_errno( LDBM ldbm );
206 LDBM    ldbm_open( char *name, int rw, int mode, int dbcachesize );
207 void    ldbm_close( LDBM ldbm );
208 void    ldbm_sync( LDBM ldbm );
209 void    ldbm_datum_free( LDBM ldbm, Datum data );
210 Datum   ldbm_datum_dup( LDBM ldbm, Datum data );
211 Datum   ldbm_fetch( LDBM ldbm, Datum key );
212 int     ldbm_store( LDBM ldbm, Datum key, Datum data, int flags );
213 int     ldbm_delete( LDBM ldbm, Datum key );
214
215 #ifdef LDBM_USE_DBBTREE
216 #  if HAVE_BERKELEY_DB2
217         LDBM    ldbm_open_env( char *name, int rw, int mode,
218                                                         int dbcachesize, DB_ENV *env );
219 #  else
220         LDBM    ldbm_open_env( char *name, int rw, int mode,
221                                                         int dbcachesize, void *env );
222 #  endif
223 #endif
224
225 #if HAVE_BERKELEY_DB2
226         void   *ldbm_malloc( size_t size );
227         Datum   ldbm_firstkey( LDBM ldbm, DBC **dbch );
228         Datum   ldbm_nextkey( LDBM ldbm, Datum key, DBC *dbcp );
229 #else
230         Datum   ldbm_firstkey( LDBM ldbm );
231         Datum   ldbm_nextkey( LDBM ldbm, Datum key );
232 #endif
233
234
235 /* initialization of Datum structures */
236 #ifdef HAVE_BERKELEY_DB2
237 #   define ldbm_datum_init(d) ((void)memset(&(d), 0, sizeof(Datum)))
238 #else
239 #   define ldbm_datum_init(d) ((void)0)
240 #endif  /* HAVE_BERKELEY_DB2 */
241
242 LDAP_END_DECL
243
244 #endif /* _ldbm_h_ */