blacklist.c

来自「elinks下lynx是最重要的二个文本浏览器, 在linux下非常实用, el」· C语言 代码 · 共 88 行

C
88
字号
/* Blacklist manager */#ifdef HAVE_CONFIG_H#include "config.h"#endif#include <string.h>#include "elinks.h"#include "protocol/http/blacklist.h"#include "protocol/uri.h"#include "util/lists.h"#include "util/memory.h"#include "util/string.h"struct blacklist_entry {	LIST_HEAD(struct blacklist_entry);	enum blacklist_flags flags;	unsigned char host[1]; /* Must be last. */};static INIT_LIST_HEAD(blacklist);static struct blacklist_entry *get_blacklist_entry(struct uri *uri){	struct blacklist_entry *entry;	assert(uri && uri->hostlen > 0);	if_assert_failed return NULL;	foreach (entry, blacklist)		if (!strlcasecmp(entry->host, -1, uri->host, uri->hostlen))			return entry;	return NULL;}voidadd_blacklist_entry(struct uri *uri, enum blacklist_flags flags){	struct blacklist_entry *entry = get_blacklist_entry(uri);	if (entry) {		entry->flags |= flags;		return;	}	entry = mem_alloc(sizeof(*entry) + uri->hostlen);	if (!entry) return;	entry->flags = flags;	safe_strncpy(entry->host, uri->host, uri->hostlen + 1);	add_to_list(blacklist, entry);}voiddel_blacklist_entry(struct uri *uri, enum blacklist_flags flags){	struct blacklist_entry *entry = get_blacklist_entry(uri);	if (!entry) return;	entry->flags &= ~flags;	if (entry->flags) return;	del_from_list(entry);	mem_free(entry);}enum blacklist_flagsget_blacklist_flags(struct uri *uri){	struct blacklist_entry *entry = get_blacklist_entry(uri);	return entry ? entry->flags : SERVER_BLACKLIST_NONE;}voidfree_blacklist(void){	free_list(blacklist);}

⌨️ 快捷键说明

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