]> git.sur5r.net Git - openldap/blob - include/ldbm.h
Import op -> slap_op , conn -> slap_conn change from rel eng 1.1.
[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 #ifdef LDBM_USE_DBBTREE
16
17 /*****************************************************************
18  *                                                               *
19  * use berkeley db btree package                                 *
20  *                                                               *
21  *****************************************************************/
22
23 #include <sys/types.h>
24 #include <limits.h>
25 #include <fcntl.h>
26
27 #ifdef HAVE_DB185_H
28 #       include <db_185.h>
29 #else
30 #       include <db.h>
31 #       ifdef HAVE_BERKELEY_DB2
32 #               define R_NOOVERWRITE DB_NOOVERWRITE
33 #               define DEFAULT_DB_PAGE_SIZE 1024
34 #       endif
35 #endif
36
37
38 typedef DBT     Datum;
39 #define dsize   size
40 #define dptr    data
41
42 typedef DB      *LDBM;
43
44 #define DB_TYPE         DB_BTREE
45
46 /* for ldbm_open */
47 #ifdef HAVE_BERKELEY_DB2
48 #       define LDBM_READER      DB_RDONLY
49 #       define LDBM_WRITER      0x00000      /* hopefully */
50 #       define LDBM_WRCREAT     (DB_NOMMAP|DB_CREATE|DB_THREAD)
51 #       define LDBM_NEWDB       (DB_TRUNCATE|DB_CREATE|DB_THREAD)
52 #else
53 #       define LDBM_READER      O_RDONLY
54 #       define LDBM_WRITER      O_RDWR
55 #       define LDBM_WRCREAT     (O_RDWR|O_CREAT)
56 #       define LDBM_NEWDB       (O_RDWR|O_TRUNC|O_CREAT)
57 #endif
58
59 #  define LDBM_FAST     0
60
61 #define LDBM_SUFFIX     ".dbb"
62 #define LDBM_ORDERED    1
63
64 /* for ldbm_insert */
65 #define LDBM_INSERT     R_NOOVERWRITE
66 #define LDBM_REPLACE    0
67 #define LDBM_SYNC       0x80000000
68
69 #elif defined( LDBM_USE_DBHASH )
70
71 /*****************************************************************
72  *                                                               *
73  * use berkeley db hash package                                  *
74  *                                                               *
75  *****************************************************************/
76
77 #include <sys/types.h>
78 #include <limits.h>
79 #include <fcntl.h>
80
81 #ifdef HAVE_DB185_H
82 #       include <db_185.h>
83 #else
84 #       include <db.h>
85 #       ifdef LDBM_USE_DB2
86 #               define R_NOOVERWRITE DB_NOOVERWRITE
87 #               define DEFAULT_DB_PAGE_SIZE 1024
88 #       endif
89 #endif
90
91 typedef DBT     Datum;
92 #define dsize   size
93 #define dptr    data
94
95 typedef DB      *LDBM;
96
97 #define DB_TYPE         DB_HASH
98
99 /* for ldbm_open */
100 #ifdef LDBM_USE_DB2
101 #       define LDBM_READER      DB_RDONLY
102 #       define LDBM_WRITER      0x00000      /* hopefully */
103 #       define LDBM_WRCREAT     (DB_NOMMAP|DB_CREATE|DB_THREAD)
104 #       define LDBM_NEWDB       (DB_TRUNCATE|DB_CREATE|DB_THREAD)
105 #else
106 #       define LDBM_READER      O_RDONLY
107 #       define LDBM_WRITER      O_RDWR
108 #       define LDBM_WRCREAT     (O_RDWR|O_CREAT)
109 #       define LDBM_NEWDB       (O_RDWR|O_TRUNC|O_CREAT)
110 #       define LDBM_FAST        0
111 #endif
112
113 #define LDBM_SUFFIX     ".dbh"
114
115 /* for ldbm_insert */
116 #define LDBM_INSERT     R_NOOVERWRITE
117 #define LDBM_REPLACE    0
118 #define LDBM_SYNC       0x80000000
119
120 #elif defined( HAVE_GDBM )
121
122 /*****************************************************************
123  *                                                               *
124  * use gdbm if possible                                          *
125  *                                                               *
126  *****************************************************************/
127
128 #include <gdbm.h>
129
130 typedef datum           Datum;
131
132 typedef GDBM_FILE       LDBM;
133
134 extern gdbm_error       gdbm_errno;
135
136 /* for ldbm_open */
137 #define LDBM_READER     GDBM_READER
138 #define LDBM_WRITER     GDBM_WRITER
139 #define LDBM_WRCREAT    GDBM_WRCREAT
140 #define LDBM_NEWDB      GDBM_NEWDB
141 #define LDBM_FAST       GDBM_FAST
142
143 #define LDBM_SUFFIX     ".gdbm"
144
145 /* for ldbm_insert */
146 #define LDBM_INSERT     GDBM_INSERT
147 #define LDBM_REPLACE    GDBM_REPLACE
148 #define LDBM_SYNC       0x80000000
149
150
151 #elif defined( HAVE_NDBM )
152
153 /*****************************************************************
154  *                                                               *
155  * if none of the above use ndbm, the standard unix thing        *
156  *                                                               *
157  *****************************************************************/
158
159 #include <ndbm.h>
160
161 #ifdef HAVE_FCNTL_H
162 #include <fcntl.h>
163 #endif
164
165 typedef datum   Datum;
166
167 typedef DBM     *LDBM;
168
169 /* for ldbm_open */
170 #define LDBM_READER     O_RDONLY
171 #define LDBM_WRITER     O_WRONLY
172 #define LDBM_WRCREAT    (O_RDWR|O_CREAT)
173 #define LDBM_NEWDB      (O_RDWR|O_TRUNC|O_CREAT)
174 #define LDBM_FAST       0
175
176 #define LDBM_SUFFIX     ".ndbm"
177
178 /* for ldbm_insert */
179 #define LDBM_INSERT     DBM_INSERT
180 #define LDBM_REPLACE    DBM_REPLACE
181 #define LDBM_SYNC       0
182
183 #endif
184
185 int     ldbm_errno( LDBM ldbm );
186 LDBM    ldbm_open( char *name, int rw, int mode, int dbcachesize );
187 void    ldbm_close( LDBM ldbm );
188 void    ldbm_sync( LDBM ldbm );
189 void    ldbm_datum_free( LDBM ldbm, Datum data );
190 Datum   ldbm_datum_dup( LDBM ldbm, Datum data );
191 Datum   ldbm_fetch( LDBM ldbm, Datum key );
192 int     ldbm_store( LDBM ldbm, Datum key, Datum data, int flags );
193 int     ldbm_delete( LDBM ldbm, Datum key );
194
195 #if HAVE_BERKELEY_DB2
196         void   *ldbm_malloc( size_t size );
197         Datum   ldbm_firstkey( LDBM ldbm, DBC **dbch );
198         Datum   ldbm_nextkey( LDBM ldbm, Datum key, DBC *dbcp );
199 #else
200         Datum   ldbm_firstkey( LDBM ldbm );
201         Datum   ldbm_nextkey( LDBM ldbm, Datum key );
202 #endif
203
204
205 /* initialization of Datum structures */
206 #ifdef HAVE_BERKELEY_DB2
207
208 #   define ldbm_datum_init(d) ((void)memset(&(d), 0, sizeof(Datum)))
209
210 #else
211
212 #   define ldbm_datum_init(d) ((void)0)
213
214 #endif  /* HAVE_BERKELEY_DB2 */
215
216 #endif /* _ldbm_h_ */