/*
 * Copyright (c) 2002-2005 Sendmail, Inc. and its suppliers.
 *      All rights reserved.
 *
 * By using this file, you agree to the terms and conditions set
 * forth in the LICENSE file which can be found at the top level of
 * the sendmail distribution.
 *
 *	$Id: bdb.h,v 1.15 2006/10/05 23:44:05 ca Exp $
 */

#ifndef SM_BDB_H
#define SM_BDB_H 1

#include "sm/io.h"
#include "sm/error.h"

#if HAVE_BERKELEYDB4
# include <db.h>
# if DB_VERSION_MAJOR != 4 || (DB_VERSION_MINOR < 1 || DB_VERSION_MINOR > 5)
#  error  wrong DB version, need 4.[1-5] got DB_VERSION_MAJOR DB_VERSION_MINOR
# endif
#else
# error  need Berkeley DB 4.[1-5]
#endif

#if DB_VERSION_MAJOR == 4 && DB_VERSION_MINOR >= 3
# define BDB43STATTXN	NULL,
#else
# define BDB43STATTXN
# define DB_BUFFER_SMALL	ENOMEM
#endif

/* XXX Should this really be here? */
#include "maps.h"

/* setopt values, 0 is reserved! */
#define SMPO_BDB_DB_CACHE_SIZE	SMPO_CACHE_SIZE
#define SMPO_BDB_DB_HASH_NELEM	SMPO_HASH_NELEM


sm_ret_T sm_bdb_class_create(sm_maps_P _maps);
sm_ret_T sm_bdbversionprt(sm_file_T *_fp);
sm_ret_T sm_bdbversionok(void);

#define BDB_ERROR_MIN	(-30999)
#define BDB_ERROR_MAX	(-30800)

#define SM_IS_BDB_ERR(ret) (sm_error_value(ret) >= BDB_ERROR_MIN && sm_error_value(ret) <= BDB_ERROR_MAX)

/*
**  BDB_ERR2RET -- Translates BDB error code to sm error code
**
**	Parameters:
**		err -- The type to translate.
**
**	Returns:
**		usual sm_error code
*/

#define BDB_ERR2RET(err) (((err) == 0) ? SM_SUCCESS :	\
	(((err) == DB_NOTFOUND) ? SM_MAP_NOTFOUND :	\
	(((err) == DB_BUFFER_SMALL) ? SM_MAP_DATA2BIG :	\
	 sm_error_perm(SM_EM_BDB, (err)))))

#endif /* SM_BDB_H */


syntax highlighted by Code2HTML, v. 0.9.1