home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / ldapsdk.zip / include / ldbm.h < prev    next >
C/C++ Source or Header  |  2001-07-27  |  7KB  |  277 lines

  1. /* $OpenLDAP: pkg/ldap/include/ldbm.h,v 1.17.8.7 2001/07/26 23:55:05 kurt Exp $ */
  2. /*
  3.  * Copyright 1998-2001 The OpenLDAP Foundation, Redwood City, California, USA
  4.  * All rights reserved.
  5.  *
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted only as authorized by the OpenLDAP
  8.  * Public License.  A copy of this license is available at
  9.  * http://www.OpenLDAP.org/license.html or in file LICENSE in the
  10.  * top-level directory of the distribution.
  11.  */
  12. /* ldbm.h - ldap dbm compatibility routine header file */
  13.  
  14. #ifndef _LDBM_H_
  15. #define _LDBM_H_
  16.  
  17. #include <ldap_cdefs.h>
  18.  
  19. /* dummy DB_ENV for non Berkeley DB */
  20. #if !defined( LDBM_USE_DBBTREE ) && !defined( LDBM_USE_DBHASH )
  21. #  define DB_ENV void
  22. #endif
  23.  
  24. #if defined( LDBM_USE_DBBTREE ) || defined( LDBM_USE_DBHASH )
  25.  
  26. /*****************************************************************
  27.  *                                                               *
  28.  * use berkeley db btree or hash package                         *
  29.  *                                                               *
  30.  *****************************************************************/
  31. #include <sys/types.h>
  32. #include <limits.h>
  33. #include <fcntl.h>
  34.  
  35. #ifdef HAVE_DB_185_H
  36. #    include <db_185.h>
  37. #else
  38. #    ifdef HAVE_DB1_DB_H
  39. #        include <db1/db.h>
  40. #    else
  41. #        include <db.h>
  42. #    endif
  43. #endif
  44.  
  45. #ifndef DB_VERSION_MAJOR
  46. #  define DB_VERSION_MAJOR 1
  47. #endif
  48. #ifndef DB_VERSION_MINOR
  49. #  define DB_VERSION_MINOR 85
  50. #endif
  51.  
  52. #if DB_VERSION_MAJOR >= 2
  53. #    define R_NOOVERWRITE DB_NOOVERWRITE
  54. #    ifndef DEFAULT_DB_PAGE_SIZE
  55. #        define DEFAULT_DB_PAGE_SIZE 4096
  56. #    endif
  57. #else
  58. #  define DB_ENV void
  59. #endif
  60.  
  61.  
  62. LDAP_BEGIN_DECL
  63.  
  64. typedef DBT    Datum;
  65. #define dsize    size
  66. #define dptr    data
  67.  
  68. typedef DB    *LDBM;
  69.  
  70.  
  71. /* for ldbm_open */
  72. #if DB_VERSION_MAJOR >= 2
  73. typedef DBC    LDBMCursor;
  74.  
  75. #    define LDBM_READER    DB_RDONLY
  76. #    define LDBM_WRITER    0x00000      /* hopefully */
  77. # if defined( HAVE_BERKELEY_DB_THREAD )
  78. #    define LDBM_WRCREAT    (DB_NOMMAP|DB_CREATE|DB_THREAD)
  79. #    define LDBM_NEWDB    (DB_TRUNCATE|DB_CREATE|DB_THREAD)
  80. # else
  81. #    define LDBM_WRCREAT    (DB_NOMMAP|DB_CREATE)
  82. #    define LDBM_NEWDB    (DB_TRUNCATE|DB_CREATE)
  83. # endif
  84.  
  85. #else
  86. typedef void LDBMCursor;
  87. #    define LDBM_READER    O_RDONLY
  88. #    define LDBM_WRITER    O_RDWR
  89. #    define LDBM_WRCREAT    (O_RDWR|O_CREAT)
  90. #    define LDBM_NEWDB    (O_RDWR|O_TRUNC|O_CREAT)
  91. #endif
  92.  
  93. LDAP_END_DECL
  94.  
  95. /* for ldbm_open */
  96. #define LDBM_NOSYNC    0
  97. #define LDBM_SYNC    0
  98. #define LDBM_LOCKING    0
  99. #define LDBM_NOLOCKING    0
  100.  
  101. /* for ldbm_insert */
  102. #define LDBM_INSERT    R_NOOVERWRITE
  103. #define LDBM_REPLACE    0
  104.  
  105. #ifdef LDBM_USE_DBBTREE
  106. #    define LDBM_ORDERED    1
  107. #    define LDBM_SUFFIX    ".dbb"
  108. #    define DB_TYPE        DB_BTREE
  109. #else
  110. #    define LDBM_SUFFIX    ".dbh"
  111. #    define DB_TYPE        DB_HASH
  112. #endif
  113.  
  114. #elif defined( HAVE_GDBM )
  115.  
  116. /*****************************************************************
  117.  *                                                               *
  118.  * use gdbm if possible                                          *
  119.  *                                                               *
  120.  *****************************************************************/
  121.  
  122. #include <gdbm.h>
  123.  
  124. LDAP_BEGIN_DECL
  125.  
  126. typedef datum        Datum;
  127. typedef Datum LDBMCursor;
  128. typedef GDBM_FILE    LDBM;
  129.  
  130. extern gdbm_error    gdbm_errno;
  131.  
  132. LDAP_END_DECL
  133.  
  134. /* for ldbm_open */
  135. #define LDBM_READER    GDBM_READER
  136. #define LDBM_WRITER    GDBM_WRITER
  137. #define LDBM_WRCREAT    GDBM_WRCREAT
  138. #define LDBM_NEWDB    GDBM_NEWDB
  139.  
  140. #ifdef GDBM_FAST
  141. #define LDBM_NOSYNC    GDBM_FAST
  142. #else
  143. #define LDBM_NOSYNC    0
  144. #endif
  145.  
  146. #ifdef GDBM_SYNC
  147. #define LDBM_SYNC    GDBM_SYNC
  148. #else
  149. #define LDBM_SYNC    0
  150. #endif
  151.  
  152. #define LDBM_LOCKING    0
  153. #ifdef GDBM_NOLOCK
  154. #define LDBM_NOLOCKING    GDBM_NOLOCK
  155. #else
  156. #define LDBM_NOLOCKING    0
  157. #endif
  158.  
  159. #define LDBM_SUFFIX    ".gdbm"
  160.  
  161. /* for ldbm_insert */
  162. #define LDBM_INSERT    GDBM_INSERT
  163. #define LDBM_REPLACE    GDBM_REPLACE
  164.  
  165. #elif defined( HAVE_MDBM )
  166.  
  167. /*****************************************************************
  168.  *                                                               *
  169.  * use mdbm if possible                                          *
  170.  *                                                               *
  171.  *****************************************************************/
  172.  
  173. #include <mdbm.h>
  174.  
  175. LDAP_BEGIN_DECL
  176.  
  177. typedef datum        Datum;
  178. typedef int LDBMCursor;
  179. typedef MDBM        *LDBM;
  180.  
  181. LDAP_END_DECL
  182.     
  183. #include <sys/types.h>
  184. #include <sys/stat.h>
  185. #include <fcntl.h>
  186.  
  187. /* for ldbm_open */
  188. #define LDBM_READER    O_RDONLY
  189. #define LDBM_WRITER    O_RDWR
  190. #define LDBM_WRCREAT    (O_RDWR|O_CREAT)
  191. #define LDBM_NEWDB    (O_RDWR|O_TRUNC|O_CREAT)
  192.  
  193. #define LDBM_SYNC    0
  194. #define LDBM_NOSYNC    0
  195. #define LDBM_LOCKING    0
  196. #define LDBM_NOLOCKING    0
  197.  
  198. #define LDBM_SUFFIX    ".mdbm"
  199.  
  200. /* for ldbm_insert */
  201. #define LDBM_INSERT    MDBM_INSERT
  202. #define LDBM_REPLACE    MDBM_REPLACE
  203.  
  204. #elif defined( HAVE_NDBM )
  205.  
  206. /*****************************************************************
  207.  *                                                               *
  208.  * if none of the above use ndbm, the standard unix thing        *
  209.  *                                                               *
  210.  *****************************************************************/
  211.  
  212. #include <ndbm.h>
  213.  
  214. #ifdef HAVE_FCNTL_H
  215. #include <fcntl.h>
  216. #endif
  217.  
  218. LDAP_BEGIN_DECL
  219.  
  220. typedef datum    Datum;
  221. typedef int LDBMCursor;
  222. typedef DBM    *LDBM;
  223.  
  224. LDAP_END_DECL
  225.  
  226. /* for ldbm_open */
  227. #define LDBM_READER    O_RDONLY
  228. #define LDBM_WRITER    O_WRONLY
  229. #define LDBM_WRCREAT    (O_RDWR|O_CREAT)
  230. #define LDBM_NEWDB    (O_RDWR|O_TRUNC|O_CREAT)
  231.  
  232. #define LDBM_NOSYNC    0
  233. #define LDBM_SYNC    0
  234. #define LDBM_NOLOCK    0
  235. #define LDBM_SYNC    0
  236.  
  237. #define LDBM_SUFFIX    ".ndbm"
  238.  
  239. /* for ldbm_insert */
  240. #define LDBM_INSERT    DBM_INSERT
  241. #define LDBM_REPLACE    DBM_REPLACE
  242.  
  243. #endif
  244.  
  245. LDAP_BEGIN_DECL
  246.  
  247. LDAP_LDBM_F (int) ldbm_initialize( const char * );
  248. LDAP_LDBM_F (int) ldbm_shutdown( void );
  249.  
  250. LDAP_LDBM_F (DB_ENV*) ldbm_initialize_env(const char *, int dbcachesize, int *envdirok);
  251. LDAP_LDBM_F (void) ldbm_shutdown_env(DB_ENV *);
  252.  
  253. LDAP_LDBM_F (int) ldbm_errno( LDBM ldbm );
  254. LDAP_LDBM_F (LDBM) ldbm_open( DB_ENV *env, char *name, int rw, int mode, int dbcachesize );
  255. LDAP_LDBM_F (void) ldbm_close( LDBM ldbm );
  256. LDAP_LDBM_F (void) ldbm_sync( LDBM ldbm );
  257. LDAP_LDBM_F (void) ldbm_datum_free( LDBM ldbm, Datum data );
  258. LDAP_LDBM_F (Datum) ldbm_datum_dup( LDBM ldbm, Datum data );
  259. LDAP_LDBM_F (Datum) ldbm_fetch( LDBM ldbm, Datum key );
  260. LDAP_LDBM_F (int) ldbm_store( LDBM ldbm, Datum key, Datum data, int flags );
  261. LDAP_LDBM_F (int) ldbm_delete( LDBM ldbm, Datum key );
  262.  
  263. LDAP_LDBM_F (Datum) ldbm_firstkey( LDBM ldbm, LDBMCursor **cursor );
  264. LDAP_LDBM_F (Datum) ldbm_nextkey( LDBM ldbm, Datum key, LDBMCursor *cursor );
  265.  
  266. /* initialization of Datum structures */
  267. #if defined( HAVE_BERKELEY_DB ) && (DB_VERSION_MAJOR >= 2)
  268.     LDAP_LDBM_F (void *) ldbm_malloc( size_t size );
  269. #   define ldbm_datum_init(d) ((void)memset(&(d), '\0', sizeof(Datum)))
  270. #else
  271. #   define ldbm_datum_init(d) ((void)0)
  272. #endif  /* HAVE_BERKELEY_DB */
  273.  
  274. LDAP_END_DECL
  275.  
  276. #endif /* _ldbm_h_ */
  277.