X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=include%2Fldbm.h;h=1592c23da5c60d69361e1481ce6d801a85b13b1c;hb=975a5e9a24e971197baa9ea2d4479100977c9060;hp=1e3c61410c52a63442b7e8ab181bf0e5da32bc97;hpb=2cf9690f9f3b8dc4c3ef3d70e2fd416b279637d8;p=openldap diff --git a/include/ldbm.h b/include/ldbm.h index 1e3c61410c..1592c23da5 100644 --- a/include/ldbm.h +++ b/include/ldbm.h @@ -1,129 +1,205 @@ +/* $OpenLDAP$ */ +/* + * Copyright 1998-2001 The OpenLDAP Foundation, Redwood City, California, USA + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted only as authorized by the OpenLDAP + * Public License. A copy of this license is available at + * http://www.OpenLDAP.org/license.html or in file LICENSE in the + * top-level directory of the distribution. + */ /* ldbm.h - ldap dbm compatibility routine header file */ #ifndef _LDBM_H_ #define _LDBM_H_ -#ifdef LDBM_USE_GDBM +#include -/***************************************************************** - * * - * use gdbm if possible * - * * - *****************************************************************/ - -#include - -typedef datum Datum; - -typedef GDBM_FILE LDBM; - -extern gdbm_error gdbm_errno; - -/* for ldbm_open */ -#define LDBM_READER GDBM_READER -#define LDBM_WRITER GDBM_WRITER -#define LDBM_WRCREAT GDBM_WRCREAT -#define LDBM_NEWDB GDBM_NEWDB -#define LDBM_FAST GDBM_FAST - -#define LDBM_SUFFIX ".gdbm" - -/* for ldbm_insert */ -#define LDBM_INSERT GDBM_INSERT -#define LDBM_REPLACE GDBM_REPLACE -#define LDBM_SYNC 0x80000000 - -#else /* end of gdbm */ +/* dummy DB_ENV for non Berkeley DB */ +#if !defined( LDBM_USE_DBBTREE ) && !defined( LDBM_USE_DBHASH ) +# define DB_ENV void +#endif -#ifdef LDBM_USE_DBHASH +#if defined( LDBM_USE_DBBTREE ) || defined( LDBM_USE_DBHASH ) /***************************************************************** * * - * use berkeley db hash package * + * use berkeley db btree or hash package * * * *****************************************************************/ - #include #include #include -#ifdef HAVE_SLEEPYCAT_DB2 +#ifdef HAVE_DB_185_H # include #else -# include +# ifdef HAVE_DB1_DB_H +# include +# else +# include +# endif +#endif + +#ifndef DB_VERSION_MAJOR +# define DB_VERSION_MAJOR 1 +#endif +#ifndef DB_VERSION_MINOR +# define DB_VERSION_MINOR 85 +#endif + +#if DB_VERSION_MAJOR >= 2 +# define R_NOOVERWRITE DB_NOOVERWRITE +# ifndef DEFAULT_DB_PAGE_SIZE +# define DEFAULT_DB_PAGE_SIZE 4096 +# endif +#else +# define DB_ENV void #endif + +LDAP_BEGIN_DECL + typedef DBT Datum; #define dsize size #define dptr data typedef DB *LDBM; -#define DB_TYPE DB_HASH /* for ldbm_open */ -#define LDBM_READER O_RDONLY -#define LDBM_WRITER O_RDWR -#define LDBM_WRCREAT (O_RDWR|O_CREAT) -#define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT) -#define LDBM_FAST 0 +#if DB_VERSION_MAJOR >= 2 +typedef DBC LDBMCursor; + +# define LDBM_READER DB_RDONLY +# define LDBM_WRITER 0x00000 /* hopefully */ +# if defined( HAVE_BERKELEY_DB_THREAD ) +# define LDBM_WRCREAT (DB_NOMMAP|DB_CREATE|DB_THREAD) +# define LDBM_NEWDB (DB_TRUNCATE|DB_CREATE|DB_THREAD) +# else +# define LDBM_WRCREAT (DB_NOMMAP|DB_CREATE) +# define LDBM_NEWDB (DB_TRUNCATE|DB_CREATE) +# endif + +#else +typedef void LDBMCursor; +# define LDBM_READER O_RDONLY +# define LDBM_WRITER O_RDWR +# define LDBM_WRCREAT (O_RDWR|O_CREAT) +# define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT) +#endif -#define LDBM_SUFFIX ".dbh" +LDAP_END_DECL + +/* for ldbm_open */ +#define LDBM_NOSYNC 0 +#define LDBM_SYNC 0 +#define LDBM_LOCKING 0 +#define LDBM_NOLOCKING 0 /* for ldbm_insert */ #define LDBM_INSERT R_NOOVERWRITE #define LDBM_REPLACE 0 -#define LDBM_SYNC 0x80000000 - -extern int errno; - -#else /* end of db hash */ #ifdef LDBM_USE_DBBTREE +# define LDBM_ORDERED 1 +# define LDBM_SUFFIX ".dbb" +# define DB_TYPE DB_BTREE +#else +# define LDBM_SUFFIX ".dbh" +# define DB_TYPE DB_HASH +#endif + +#elif defined( HAVE_GDBM ) /***************************************************************** * * - * use berkeley db btree package * + * use gdbm if possible * * * *****************************************************************/ -#include -#include -#include -#ifdef HAVE_SLEEPYCAT_DB2 -# include +#include + +LDAP_BEGIN_DECL + +typedef datum Datum; +typedef Datum LDBMCursor; +typedef GDBM_FILE LDBM; + +LDAP_END_DECL + +/* for ldbm_open */ +#define LDBM_READER GDBM_READER +#define LDBM_WRITER GDBM_WRITER +#define LDBM_WRCREAT GDBM_WRCREAT +#define LDBM_NEWDB GDBM_NEWDB + +#ifdef GDBM_FAST +#define LDBM_NOSYNC GDBM_FAST #else -# include +#define LDBM_NOSYNC 0 #endif -typedef DBT Datum; -#define dsize size -#define dptr data +#ifdef GDBM_SYNC +#define LDBM_SYNC GDBM_SYNC +#else +#define LDBM_SYNC 0 +#endif -typedef DB *LDBM; +#define LDBM_LOCKING 0 +#ifdef GDBM_NOLOCK +#define LDBM_NOLOCKING GDBM_NOLOCK +#else +#define LDBM_NOLOCKING 0 +#endif + +#define LDBM_SUFFIX ".gdbm" + +/* for ldbm_insert */ +#define LDBM_INSERT GDBM_INSERT +#define LDBM_REPLACE GDBM_REPLACE + +#elif defined( HAVE_MDBM ) + +/***************************************************************** + * * + * use mdbm if possible * + * * + *****************************************************************/ + +#include -#define DB_TYPE DB_BTREE +LDAP_BEGIN_DECL + +typedef datum Datum; +typedef int LDBMCursor; +typedef MDBM *LDBM; + +LDAP_END_DECL + +#include +#include +#include /* for ldbm_open */ #define LDBM_READER O_RDONLY #define LDBM_WRITER O_RDWR #define LDBM_WRCREAT (O_RDWR|O_CREAT) #define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT) -#define LDBM_FAST 0 -#define LDBM_SUFFIX ".dbb" -#define LDBM_ORDERED 1 - -/* for ldbm_insert */ -#define LDBM_INSERT R_NOOVERWRITE -#define LDBM_REPLACE 0 -#define LDBM_SYNC 0x80000000 +#define LDBM_SYNC 0 +#define LDBM_NOSYNC 0 +#define LDBM_LOCKING 0 +#define LDBM_NOLOCKING 0 -extern int errno; +#define LDBM_SUFFIX ".mdbm" -#else /* end of db btree */ +/* for ldbm_insert */ +#define LDBM_INSERT MDBM_INSERT +#define LDBM_REPLACE MDBM_REPLACE -#ifdef LDBM_USE_NDBM +#elif defined( HAVE_NDBM ) /***************************************************************** * * @@ -132,43 +208,67 @@ extern int errno; *****************************************************************/ #include -#ifndef O_RDONLY + +#ifdef HAVE_FCNTL_H #include #endif -typedef datum Datum; +LDAP_BEGIN_DECL +typedef datum Datum; +typedef int LDBMCursor; typedef DBM *LDBM; +LDAP_END_DECL + /* for ldbm_open */ #define LDBM_READER O_RDONLY #define LDBM_WRITER O_WRONLY #define LDBM_WRCREAT (O_RDWR|O_CREAT) #define LDBM_NEWDB (O_RDWR|O_TRUNC|O_CREAT) -#define LDBM_FAST 0 + +#define LDBM_NOSYNC 0 +#define LDBM_SYNC 0 +#define LDBM_NOLOCK 0 +#define LDBM_SYNC 0 #define LDBM_SUFFIX ".ndbm" /* for ldbm_insert */ #define LDBM_INSERT DBM_INSERT #define LDBM_REPLACE DBM_REPLACE -#define LDBM_SYNC 0 -#endif /* ndbm */ -#endif /* db hash */ -#endif /* db btree */ -#endif /* gdbm */ - -LDBM ldbm_open( char *name, int rw, int mode, int dbcachesize ); -void ldbm_close( LDBM ldbm ); -void ldbm_sync( LDBM ldbm ); -void ldbm_datum_free( LDBM ldbm, Datum data ); -Datum ldbm_datum_dup( LDBM ldbm, Datum data ); -Datum ldbm_fetch( LDBM ldbm, Datum key ); -int ldbm_store( LDBM ldbm, Datum key, Datum data, int flags ); -int ldbm_delete( LDBM ldbm, Datum key ); -Datum ldbm_firstkey( LDBM ldbm ); -Datum ldbm_nextkey( LDBM ldbm, Datum key ); -int ldbm_errno( LDBM ldbm ); +#endif + +LDAP_BEGIN_DECL + +LDAP_LDBM_F (int) ldbm_initialize( const char * ); +LDAP_LDBM_F (int) ldbm_shutdown( void ); + +LDAP_LDBM_F (DB_ENV*) ldbm_initialize_env(const char *, int dbcachesize, int *envdirok); +LDAP_LDBM_F (void) ldbm_shutdown_env(DB_ENV *); + +LDAP_LDBM_F (int) ldbm_errno( LDBM ldbm ); +LDAP_LDBM_F (LDBM) ldbm_open( DB_ENV *env, char *name, int rw, int mode, int dbcachesize ); +LDAP_LDBM_F (void) ldbm_close( LDBM ldbm ); +LDAP_LDBM_F (void) ldbm_sync( LDBM ldbm ); +LDAP_LDBM_F (void) ldbm_datum_free( LDBM ldbm, Datum data ); +LDAP_LDBM_F (Datum) ldbm_datum_dup( LDBM ldbm, Datum data ); +LDAP_LDBM_F (Datum) ldbm_fetch( LDBM ldbm, Datum key ); +LDAP_LDBM_F (int) ldbm_store( LDBM ldbm, Datum key, Datum data, int flags ); +LDAP_LDBM_F (int) ldbm_delete( LDBM ldbm, Datum key ); + +LDAP_LDBM_F (Datum) ldbm_firstkey( LDBM ldbm, LDBMCursor **cursor ); +LDAP_LDBM_F (Datum) ldbm_nextkey( LDBM ldbm, Datum key, LDBMCursor *cursor ); + +/* initialization of Datum structures */ +#if defined( HAVE_BERKELEY_DB ) && (DB_VERSION_MAJOR >= 2) + LDAP_LDBM_F (void *) ldbm_malloc( size_t size ); +# define ldbm_datum_init(d) ((void)memset(&(d), '\0', sizeof(Datum))) +#else +# define ldbm_datum_init(d) ((void)0) +#endif /* HAVE_BERKELEY_DB */ + +LDAP_END_DECL #endif /* _ldbm_h_ */