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

📄 wordlists_base.c

📁 一个C语言写的快速贝叶斯垃圾邮件过滤工具
💻 C
字号:
/* $Id: wordlists_base.c,v 1.46 2005/05/06 01:34:01 relson Exp $ */#include "common.h"#include "find_home.h"#include "mxcat.h"#include "paths.h"#include "wordlists.h"#include "wordlists_base.h"#include "xmalloc.h"#include "xstrdup.h"/** priority queue of wordlists, ordered by their "override" parameter *//*@null@*/ wordlist_t* word_lists=NULL;/** Check if wordlist nodes \a a and \a b have the same type, override, * listname and filepath, \returns true if these parameters match in * either list node. */static bool is_dup_wordlist(wordlist_t *a, wordlist_t *b){    if (a->type != b->type)	return false;    if (a->override!= b->override)	return false;    if (strcmp(a->listname, b->listname) != 0)	return false;    if (a->bfp->filepath != NULL &&	b->bfp->filepath != NULL &&	strcmp(a->bfp->filepath, b->bfp->filepath) != 0)	return false;    return true;}/** Free a wordlist node and return the pointer to the next node */static wordlist_t *free_wordlistnode(wordlist_t *node){    wordlist_t *next = node->next;    xfree(node->listname);    bfpath_free(node->bfp);    xfree(node);    return next;}void wordlists_set_bogohome(void){    wordlist_t *list;    /* set up default wordlist, if not yet done */    if (word_lists == NULL)	init_wordlist("word", WORDLIST, 0, WL_REGULAR);    for (list = word_lists; list != NULL; list = list->next)	bfpath_set_bogohome(list->bfp);}void init_wordlist(const char* name,		   const char *path,		   int override, WL_TYPE type){    wordlist_t *n = (wordlist_t *)xcalloc(1, sizeof(*n));    wordlist_t *list_ptr;    /* initialize list node */    n->listname=xstrdup(name);    n->bfp     =bfpath_create(path);    n->type    =type;    n->override=override;    /* now enqueue according to "override" (priority) */    list_ptr=word_lists;    if (list_ptr == NULL ||	list_ptr->override > override) {	/* prepend to list */	n->next=word_lists;	word_lists=n;	return;    }    for ( ; ; list_ptr=list_ptr->next) {	/* drop duplicates */	if (is_dup_wordlist(n, list_ptr)) {	    free_wordlistnode(n);	    return;	}	/* append to list */	if (list_ptr->next == NULL ||	    list_ptr->next->override > override) {	    n->next=list_ptr->next;	    list_ptr->next=n;	    return;	}    }}wordlist_t *get_default_wordlist(wordlist_t *list){    for (; list != NULL ; list = list->next)    {	if (list->type != WL_IGNORE)	    return list;    }    /* not found -> abort */    fprintf(stderr, "Can't find default wordlist.\n");    exit(EX_ERROR);}/* setup_wordlists()   returns: -1 for error, 0 for success   **   ** precedence: (high to low)   **   **	command line   **	$BOGOFILTER_DIR   **	user config file   **	site config file   **	$HOME   */void free_wordlists(){    wordlist_t *list = word_lists;    while (list)    {	list = free_wordlistnode(list);    }    bogohome_cleanup();}void display_wordlists(wordlist_t *list, const char *fmt){    for (; list; list = list->next)    {	printf(fmt, "wordlist");	printf("%s,%s,%s,%d\n",		(list->type == WL_REGULAR) ? "r" : "i",		list->listname,		list->bfp->filepath,		list->override);    }}

⌨️ 快捷键说明

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