⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 datastore_db_trad.c

📁 一个C语言写的快速贝叶斯垃圾邮件过滤工具
💻 C
字号:
/* $Id: datastore_db_trad.c,v 1.17 2006/05/29 14:28:00 relson Exp $ *//*****************************************************************************NAME:datastore_db_trad.c -- implements bogofilter's traditional		       (non-transactional) datastore, 		       using Berkeley DBAUTHORS:Gyepi Sam <gyepi@praxis-sw.com>   2002 - 2003Matthias Andree <matthias.andree@gmx.de> 2003 - 2004David Relson	<relson@osagesoftware.com> 2003 - 2005******************************************************************************/#include "common.h"#include <errno.h>#include <db.h>#include "datastore.h"#include "datastore_db_private.h"#include "datastore_db.h"#include "datastore_dbcommon.h"#include "db_lock.h"#include "error.h"#include "longoptions.h"#include "paths.h"#include "xmalloc.h"#include "xstrdup.h"/* public -- used in datastore.c *//* private -- used in datastore_db_*.c */static DB_ENV	  *bft_get_env_dbe	(dbe_t *env);static const char *bft_database_name	(const char *db_file);static DB_ENV	  *bft_recover_open	(bfpath *bfp);static int	   bft_get_rmw_flag	(int open_mode);static void	   bft_log_flush	(DB_ENV *dbe);static dbe_t	  *bft_init		(bfpath *bfp);static void 	   bft_cleanup		(dbe_t *env);static void 	   bft_cleanup_lite	(dbe_t *env);/* OO function lists */dsm_t dsm_traditional = {    /* public -- used in datastore.c */    NULL,	/* bft_begin           */    NULL,	/* bft_abort           */    NULL,	/* bft_commit          */    /* private -- used in datastore_db_*.c */    &bft_init,    &bft_cleanup,    &bft_cleanup_lite,    &bft_get_env_dbe,    &bft_database_name,    &bft_recover_open,    NULL,		/* bft_auto_commit_flags*/    &bft_get_rmw_flag,    &db_lock,    NULL,		/* &bft_common_close    */    NULL,		/* &bft_sync            */    &bft_log_flush,    &db_pagesize,	/* dsm_pagesize         */    NULL,		/* dsm_checkpoint       */    NULL,		/* dsm_purgelogs        */    NULL,		/* dsm_recover          */    NULL,		/* dsm_remove           */    NULL,		/* dsm_verify           */    NULL,		/* dsm_list_logfiles    */    &db_leafpages	/* dsm_leafpages        */};DB_ENV *bft_get_env_dbe	(dbe_t *env){    (void) env;    return NULL;}const char *bft_database_name(const char *db_file){    return db_file;}int bft_get_rmw_flag(int open_mode){    (void) open_mode;    return 0;}DB_ENV *bft_recover_open(bfpath *bfp){    int fd;    fd = open(bfp->filepath, O_RDWR);    if (fd < 0) {	print_error(__FILE__, __LINE__, "bft_recover_open: cannot open %s: %s", bfp->filepath,		    strerror(errno));	exit(EX_ERROR);    }    if (subr_db_lock(fd, F_SETLKW, (short int)F_WRLCK)) {	print_error(__FILE__, __LINE__,		    "bft_recover_open: cannot lock %s for exclusive use: %s", bfp->filepath,		    strerror(errno));	close(fd);	exit(EX_ERROR);    }    return NULL;}void bft_log_flush(DB_ENV *dbe){    int ret;    ret = BF_LOG_FLUSH(dbe, NULL);    if (DEBUG_DATABASE(1))	fprintf(dbgout, "DB_ENV->log_flush(%p): %s\n", (void *)dbe,		db_strerror(ret));}dbe_t *bft_init(bfpath *bfp){    dbe_t *env = xcalloc(1, sizeof(dbe_t));    env->magic = MAGIC_DBE;	    /* poor man's type checking */    env->directory = xstrdup(bfp->dirname);    return env;}void bft_cleanup(dbe_t *env){    bft_cleanup_lite(env);}void bft_cleanup_lite(dbe_t *env){    xfree(env->directory);    xfree(env);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -