ldbm.h 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388
  1. /** BEGIN COPYRIGHT BLOCK
  2. * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
  3. * Copyright (C) 2005 Red Hat, Inc.
  4. * All rights reserved.
  5. *
  6. * License: GPL (version 3 or any later version).
  7. * See LICENSE for details.
  8. * END COPYRIGHT BLOCK **/
  9. #ifdef HAVE_CONFIG_H
  10. # include <config.h>
  11. #endif
  12. /* ldbm.h - ldap dbm compatibility routine header file */
  13. #error "Hmm, shoudn't be here"
  14. /* Deprecated header, why are you including it ??? */
  15. #if 1
  16. #ifndef _LDBM_H_
  17. #define _LDBM_H_
  18. /* define LDAP_USE_DB185 to get the old db library, otherwise, use db2.0 */
  19. #ifndef LDAP_USE_DB185
  20. #define LDAP_USE_DB20
  21. #endif
  22. #ifdef LDBM_USE_GDBM
  23. /*****************************************************************
  24. * *
  25. * use gdbm if possible *
  26. * *
  27. *****************************************************************/
  28. #include <gdbm.h>
  29. typedef datum Datum;
  30. typedef GDBM_FILE LDBM;
  31. extern gdbm_error gdbm_errno;
  32. /* for ldbm_open */
  33. #define LDBM_READER GDBM_READER
  34. #define LDBM_WRITER GDBM_WRITER
  35. #define LDBM_WRCREAT GDBM_WRCREAT
  36. #define LDBM_NEWDB GDBM_NEWDB
  37. #define LDBM_FAST GDBM_FAST
  38. #define LDBM_SUFFIX ".gdbm"
  39. /* for ldbm_insert */
  40. #define LDBM_INSERT GDBM_INSERT
  41. #define LDBM_REPLACE GDBM_REPLACE
  42. #define LDBM_SYNC 0x80000000
  43. #else /* end of gdbm */
  44. #ifdef LDBM_USE_DBHASH
  45. /*****************************************************************
  46. * *
  47. * use berkeley db hash package *
  48. * *
  49. *****************************************************************/
  50. #include <sys/types.h>
  51. #include <limits.h>
  52. #include <fcntl.h>
  53. #include <errno.h>
  54. #include <db.h>
  55. typedef DBT Datum;
  56. #define dsize size
  57. #define dptr data
  58. typedef DB *LDBM;
  59. #define DB_TYPE DB_HASH
  60. /* for ldbm_open */
  61. #define LDBM_READER O_RDONLY
  62. #define LDBM_WRITER O_RDWR
  63. #define LDBM_WRCREAT (O_RDWR|O_CREAT)
  64. #define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
  65. #define LDBM_FAST 0
  66. #define LDBM_SUFFIX ".dbh"
  67. /* for ldbm_insert */
  68. #define LDBM_INSERT R_NOOVERWRITE
  69. #define LDBM_REPLACE 0
  70. #define LDBM_SYNC 0x80000000
  71. #else /* end of db hash */
  72. #ifdef LDBM_USE_DBBTREE
  73. /*****************************************************************
  74. * *
  75. * use berkeley db btree package *
  76. * *
  77. *****************************************************************/
  78. #ifndef LDAP_USE_DB20 /* old-db needed us to include these system headers first */
  79. #include <sys/types.h>
  80. #include <limits.h>
  81. #include <fcntl.h>
  82. #include <errno.h>
  83. #endif
  84. #ifdef HPUX11
  85. #define __BIT_TYPES_DEFINED__
  86. typedef unsigned char u_int8_t;
  87. typedef unsigned int u_int32_t;
  88. typedef unsigned short u_int16_t;
  89. #endif
  90. #include <db.h>
  91. #define DB_TYPE DB_BTREE
  92. #define LDBM_ORDERED 1
  93. #ifdef LDAP_USE_DB20
  94. /* pull in parts of the new interface , this comes from dblayer.h */
  95. typedef struct _tag_dblayer_session{
  96. DB_ENV db_env;
  97. } *dblayer_session, dblayer_session_struct;
  98. /* for ldbm_insert */
  99. #define LDBM_INSERT DB_NOOVERWRITE
  100. #define LDBM_REPLACE 0 /* Db2.0 default is to replace */
  101. #define LDBM_SYNC 0x80000000
  102. typedef DBT Datum;
  103. #define dsize size
  104. #define dptr data
  105. typedef struct _ldbm {
  106. DB *pReal_DB;
  107. DBC *pCursor;
  108. } _ldbmstruct, *LDBM;
  109. /* for ldbm_open */
  110. #define LDBM_READER DB_RDONLY
  111. #define LDBM_WRITER 0
  112. #define LDBM_WRCREAT DB_CREATE
  113. #define LDBM_NEWDB (DB_TRUNCATE | DB_CREATE)
  114. #define LDBM_FAST 0
  115. #define LDBM_SUFFIX ".db2"
  116. #else /* DB 1.85 */
  117. /* for ldbm_insert */
  118. #define LDBM_INSERT R_NOOVERWRITE
  119. #define LDBM_REPLACE 0
  120. #define LDBM_SYNC 0x80000000
  121. typedef DBT Datum;
  122. #define dsize size
  123. #define dptr data
  124. typedef DB *LDBM;
  125. /* for ldbm_open */
  126. #define LDBM_READER O_RDONLY
  127. #define LDBM_WRITER O_RDWR
  128. #define LDBM_WRCREAT (O_RDWR|O_CREAT)
  129. #define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
  130. #define LDBM_FAST 0
  131. #define LDBM_SUFFIX ".dbb"
  132. #endif /* LDAP_USE_DB20 */
  133. #else /* end of db btree */
  134. #ifdef LDBM_USE_NDBM
  135. /*****************************************************************
  136. * *
  137. * if none of the above use ndbm, the standard unix thing *
  138. * *
  139. *****************************************************************/
  140. #include <ndbm.h>
  141. #ifndef O_RDONLY
  142. #include <fcntl.h>
  143. #endif
  144. typedef datum Datum;
  145. typedef DBM *LDBM;
  146. /* for ldbm_open */
  147. #define LDBM_READER O_RDONLY
  148. #define LDBM_WRITER O_WRONLY
  149. #define LDBM_WRCREAT (O_RDWR|O_CREAT)
  150. #define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT)
  151. #define LDBM_FAST 0
  152. #define LDBM_SUFFIX ".ndbm"
  153. /* for ldbm_insert */
  154. #define LDBM_INSERT DBM_INSERT
  155. #define LDBM_REPLACE DBM_REPLACE
  156. #define LDBM_SYNC 0
  157. #else /* end of ndbm */
  158. #ifdef LDBM_USE_CISAM
  159. /*****************************************************************
  160. * *
  161. * use CISAM db package *
  162. * *
  163. *****************************************************************/
  164. #include <sys/types.h>
  165. #include <sys/errno.h>
  166. #include <limits.h>
  167. #include <fcntl.h>
  168. #include "isam.h"
  169. extern int errno;
  170. struct datum {
  171. void *dptr; /* data */
  172. size_t dsize; /* data length */
  173. };
  174. typedef struct datum Datum;
  175. struct ldbm {
  176. int fd; /* all callers expect a ptr */
  177. int cur_recnum; /* for reading sequentially */
  178. };
  179. typedef struct ldbm *LDBM;
  180. /* for ldbm_open */
  181. #define LDBM_READER (ISINPUT | ISVARLEN | ISMANULOCK)
  182. #define LDBM_WRITER (ISINOUT | ISVARLEN | ISMANULOCK)
  183. #define LDBM_WRCREAT (ISINOUT | ISVARLEN | ISMANULOCK | ISEXCLLOCK)
  184. #define LDBM_NEWDB (ISINOUT | ISVARLEN | ISMANULOCK | ISEXCLLOCK)
  185. #define LDBM_FAST 0
  186. #define LDBM_SUFFIX ""
  187. #define LDBM_ORDERED 1
  188. /* for ldbm_insert */
  189. #define LDBM_INSERT 1
  190. #define LDBM_REPLACE 0
  191. #define LDBM_SYNC 0x80000000
  192. #else /* end of cisam */
  193. #ifdef LDBM_USE_TRIO
  194. /*****************************************************************
  195. * *
  196. * use C-Index/II from Trio *
  197. * *
  198. *****************************************************************/
  199. #include <sys/types.h>
  200. #include <sys/errno.h>
  201. #include <limits.h>
  202. #include <fcntl.h>
  203. #include "cndx.h"
  204. #define CRDCREAT 0x100
  205. extern int errno;
  206. struct datum {
  207. void *dptr; /* data */
  208. size_t dsize; /* data length */
  209. };
  210. typedef struct datum Datum;
  211. typedef CFILE *LDBM;
  212. /* for ldbm_open */
  213. #define LDBM_READER (CRDONLY)
  214. #define LDBM_WRITER (CRDWRITE)
  215. #define LDBM_WRCREAT (CRDWRITE | CRDCREAT)
  216. #define LDBM_NEWDB (CRDWRITE | CRDCREAT)
  217. #define LDBM_FAST 0
  218. #define LDBM_SUFFIX ".c2i"
  219. #define LDBM_ORDERED 1
  220. /* for ldbm_insert */
  221. #define LDBM_INSERT 1
  222. #define LDBM_REPLACE 0
  223. #define LDBM_SYNC 0x80000000
  224. #else /* end of trio */
  225. #ifdef LDBM_USE_CTREE
  226. /*****************************************************************
  227. * *
  228. * use Faircom Ctree db package *
  229. * *
  230. *****************************************************************/
  231. #include <sys/types.h>
  232. #include <sys/errno.h>
  233. #include <limits.h>
  234. #include <fcntl.h>
  235. #include "ctstdr.h"
  236. #include "ctoptn.h"
  237. #include "ctaerr.h"
  238. #include "ctdecl.h"
  239. #include "cterrc.h"
  240. extern int errno;
  241. struct datum {
  242. void *dptr; /* data */
  243. size_t dsize; /* data length */
  244. };
  245. typedef struct datum Datum;
  246. typedef IFIL *LDBM;
  247. /* for ldbm_open */
  248. #define LDBM_READER 0
  249. #define LDBM_WRITER 0
  250. #define LDBM_WRCREAT 1
  251. #define LDBM_NEWDB 1
  252. #define LDBM_FAST 0
  253. #define LDBM_SUFFIX ""
  254. #define LDBM_ORDERED 1
  255. /* for ldbm_insert */
  256. #define LDBM_INSERT 1
  257. #define LDBM_REPLACE 0
  258. #define LDBM_SYNC 0x80000000
  259. #endif /* ctree */
  260. #endif /* trio */
  261. #endif /* cisam */
  262. #endif /* ndbm */
  263. #endif /* db hash */
  264. #endif /* db btree */
  265. #endif /* gdbm */
  266. /*
  267. * name: file name without the suffix
  268. * rw: read/write flags
  269. * mode: this has the desired permissions mode on the file
  270. * dbcachesize: advisory cache size in bytes
  271. */
  272. LDBM ldbm_open( char *name, int rw, int mode, int dbcachesize );
  273. #ifdef LDAP_USE_DB20
  274. /* This is a stopgap measure to allow us to associate a session with ldbm_ calls */
  275. LDBM ldbm_open2( dblayer_session session, char *name, int rw, int mode);
  276. /* These are stolen from beta2's dblayer.h */
  277. int dblayer_session_open(char *home_dir, char* log_dir, char* temp_dir, int cachesize, dblayer_session session) ;
  278. int dblayer_session_terminate(dblayer_session session) ;
  279. #endif
  280. int ldbm_close( LDBM ldbm );
  281. void ldbm_sync( LDBM ldbm );
  282. void ldbm_datum_free( LDBM ldbm, Datum data );
  283. Datum ldbm_datum_dup( LDBM ldbm, Datum data );
  284. Datum ldbm_fetch( LDBM ldbm, Datum key );
  285. int ldbm_store( LDBM ldbm, Datum key, Datum data, int flags );
  286. int ldbm_delete( LDBM ldbm, Datum key );
  287. Datum ldbm_firstkey( LDBM ldbm );
  288. Datum ldbm_nextkey( LDBM ldbm, Datum key );
  289. Datum ldbm_prevkey( LDBM ldbm, Datum key );
  290. Datum ldbm_lastkey( LDBM ldbm );
  291. Datum ldbm_cursorkey( LDBM ldbm, Datum key );
  292. int ldbm_errno( LDBM ldbm );
  293. #endif /* _ldbm_h_ */
  294. #endif /* 0 */