亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? hashtab.c

?? 優龍2410linux2.6.8內核源代碼
?? C
字號:
/* * Implementation of the hash table type. * * Author : Stephen Smalley, <sds@epoch.ncsc.mil> */#include <linux/kernel.h>#include <linux/slab.h>#include <linux/errno.h>#include "hashtab.h"struct hashtab *hashtab_create(u32 (*hash_value)(struct hashtab *h, void *key),                               int (*keycmp)(struct hashtab *h, void *key1, void *key2),                               u32 size){	struct hashtab *p;	u32 i;	p = kmalloc(sizeof(*p), GFP_KERNEL);	if (p == NULL)		return p;	memset(p, 0, sizeof(*p));	p->size = size;	p->nel = 0;	p->hash_value = hash_value;	p->keycmp = keycmp;	p->htable = kmalloc(sizeof(*(p->htable)) * size, GFP_KERNEL);	if (p->htable == NULL) {		kfree(p);		return NULL;	}	for (i = 0; i < size; i++)		p->htable[i] = NULL;	return p;}int hashtab_insert(struct hashtab *h, void *key, void *datum){	u32 hvalue;	struct hashtab_node *prev, *cur, *newnode;	if (!h || h->nel == HASHTAB_MAX_NODES)		return -EINVAL;	hvalue = h->hash_value(h, key);	prev = NULL;	cur = h->htable[hvalue];	while (cur && h->keycmp(h, key, cur->key) > 0) {		prev = cur;		cur = cur->next;	}	if (cur && (h->keycmp(h, key, cur->key) == 0))		return -EEXIST;	newnode = kmalloc(sizeof(*newnode), GFP_KERNEL);	if (newnode == NULL)		return -ENOMEM;	memset(newnode, 0, sizeof(*newnode));	newnode->key = key;	newnode->datum = datum;	if (prev) {		newnode->next = prev->next;		prev->next = newnode;	} else {		newnode->next = h->htable[hvalue];		h->htable[hvalue] = newnode;	}	h->nel++;	return 0;}int hashtab_remove(struct hashtab *h, void *key,		   void (*destroy)(void *k, void *d, void *args),		   void *args){	u32 hvalue;	struct hashtab_node *cur, *last;	if (!h)		return -EINVAL;	hvalue = h->hash_value(h, key);	last = NULL;	cur = h->htable[hvalue];	while (cur != NULL && h->keycmp(h, key, cur->key) > 0) {		last = cur;		cur = cur->next;	}	if (cur == NULL || (h->keycmp(h, key, cur->key) != 0))		return -ENOENT;	if (last == NULL)		h->htable[hvalue] = cur->next;	else		last->next = cur->next;	if (destroy)		destroy(cur->key, cur->datum, args);	kfree(cur);	h->nel--;	return 0;}int hashtab_replace(struct hashtab *h, void *key, void *datum,		    void (*destroy)(void *k, void *d, void *args),		    void *args){	u32 hvalue;	struct hashtab_node *prev, *cur, *newnode;	if (!h)		return -EINVAL;	hvalue = h->hash_value(h, key);	prev = NULL;	cur = h->htable[hvalue];	while (cur != NULL && h->keycmp(h, key, cur->key) > 0) {		prev = cur;		cur = cur->next;	}	if (cur && (h->keycmp(h, key, cur->key) == 0)) {		if (destroy)			destroy(cur->key, cur->datum, args);		cur->key = key;		cur->datum = datum;	} else {		newnode = kmalloc(sizeof(*newnode), GFP_KERNEL);		if (newnode == NULL)			return -ENOMEM;		memset(newnode, 0, sizeof(*newnode));		newnode->key = key;		newnode->datum = datum;		if (prev) {			newnode->next = prev->next;			prev->next = newnode;		} else {			newnode->next = h->htable[hvalue];			h->htable[hvalue] = newnode;		}	}	return 0;}void *hashtab_search(struct hashtab *h, void *key){	u32 hvalue;	struct hashtab_node *cur;	if (!h)		return NULL;	hvalue = h->hash_value(h, key);	cur = h->htable[hvalue];	while (cur != NULL && h->keycmp(h, key, cur->key) > 0)		cur = cur->next;	if (cur == NULL || (h->keycmp(h, key, cur->key) != 0))		return NULL;	return cur->datum;}void hashtab_destroy(struct hashtab *h){	u32 i;	struct hashtab_node *cur, *temp;	if (!h)		return;	for (i = 0; i < h->size; i++) {		cur = h->htable[i];		while (cur != NULL) {			temp = cur;			cur = cur->next;			kfree(temp);		}		h->htable[i] = NULL;	}	kfree(h->htable);	h->htable = NULL;	kfree(h);}int hashtab_map(struct hashtab *h,		int (*apply)(void *k, void *d, void *args),		void *args){	u32 i;	int ret;	struct hashtab_node *cur;	if (!h)		return 0;	for (i = 0; i < h->size; i++) {		cur = h->htable[i];		while (cur != NULL) {			ret = apply(cur->key, cur->datum, args);			if (ret)				return ret;			cur = cur->next;		}	}	return 0;}void hashtab_map_remove_on_error(struct hashtab *h,                                 int (*apply)(void *k, void *d, void *args),                                 void (*destroy)(void *k, void *d, void *args),                                 void *args){	u32 i;	int ret;	struct hashtab_node *last, *cur, *temp;	if (!h)		return;	for (i = 0; i < h->size; i++) {		last = NULL;		cur = h->htable[i];		while (cur != NULL) {			ret = apply(cur->key, cur->datum, args);			if (ret) {				if (last)					last->next = cur->next;				else					h->htable[i] = cur->next;				temp = cur;				cur = cur->next;				if (destroy)					destroy(temp->key, temp->datum, args);				kfree(temp);				h->nel--;			} else {				last = cur;				cur = cur->next;			}		}	}	return;}void hashtab_stat(struct hashtab *h, struct hashtab_info *info){	u32 i, chain_len, slots_used, max_chain_len;	struct hashtab_node *cur;	slots_used = 0;	max_chain_len = 0;	for (slots_used = max_chain_len = i = 0; i < h->size; i++) {		cur = h->htable[i];		if (cur) {			slots_used++;			chain_len = 0;			while (cur) {				chain_len++;				cur = cur->next;			}			if (chain_len > max_chain_len)				max_chain_len = chain_len;		}	}	info->slots_used = slots_used;	info->max_chain_len = max_chain_len;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产三级久久久| 久久久99久久| 色婷婷亚洲一区二区三区| 国产成人在线色| 国产91高潮流白浆在线麻豆| 韩国一区二区视频| 东方欧美亚洲色图在线| www.日韩av| 91丝袜国产在线播放| 日本福利一区二区| 欧美日韩中文一区| 欧美日产国产精品| 91精品国产丝袜白色高跟鞋| 91精品国产福利在线观看| 91精品蜜臀在线一区尤物| 日韩精品一区二区三区中文精品| 欧美刺激脚交jootjob| 久久免费的精品国产v∧| 亚洲国产精品成人综合色在线婷婷| 国产精品色在线| 亚洲国产欧美一区二区三区丁香婷| 亚洲综合精品自拍| 激情偷乱视频一区二区三区| 国产成人av影院| 色哟哟国产精品免费观看| 欧美电影一区二区| 欧美激情一区二区三区蜜桃视频| 国产精品福利一区| 天天影视涩香欲综合网| 国产九色sp调教91| 在线观看亚洲一区| 国产女主播一区| 日本午夜精品一区二区三区电影| 国产精品一区二区在线观看不卡| 91视频免费播放| 欧美一级二级三级乱码| 亚洲日本韩国一区| 美女脱光内衣内裤视频久久影院| www.欧美色图| 精品福利一区二区三区| 亚洲一本大道在线| 国产成人精品综合在线观看 | 欧亚一区二区三区| 精品福利av导航| 亚洲永久精品大片| 成人美女视频在线观看| 在线播放中文一区| 亚洲女爱视频在线| 国产jizzjizz一区二区| 在线播放日韩导航| 亚洲人成网站在线| 成人av在线资源| 精品国产一二三| 亚洲国产另类精品专区| 99精品久久免费看蜜臀剧情介绍| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | voyeur盗摄精品| 国产午夜亚洲精品理论片色戒| 亚洲不卡av一区二区三区| av一二三不卡影片| 国产精品亲子乱子伦xxxx裸| 极品美女销魂一区二区三区免费| 欧美日本韩国一区二区三区视频| 136国产福利精品导航| 国产成人自拍在线| 国产欧美一区二区精品性色超碰 | 欧美亚洲日本国产| 亚洲精品va在线观看| 波多野结衣中文字幕一区| 日本一二三不卡| 精品一区二区三区在线观看| 欧美一区二区在线免费观看| 天天综合日日夜夜精品| 91麻豆精品国产91久久久久| 免费观看一级欧美片| 在线观看91av| 裸体健美xxxx欧美裸体表演| 制服丝袜中文字幕亚洲| 秋霞国产午夜精品免费视频| 欧美久久免费观看| 日韩 欧美一区二区三区| 日韩视频免费观看高清完整版 | 亚洲欧洲日韩一区二区三区| 成人午夜电影小说| 国产精品视频第一区| 99精品热视频| 亚洲国产一区二区视频| 91精品国产美女浴室洗澡无遮挡| 亚洲成a人在线观看| 91超碰这里只有精品国产| 久久99精品久久久久久国产越南| 精品欧美乱码久久久久久1区2区| 国产精品资源在线看| 国产精品二区一区二区aⅴ污介绍| 99久久精品情趣| 亚洲与欧洲av电影| 精品日产卡一卡二卡麻豆| 国产成人综合网| 亚洲欧洲制服丝袜| 日韩欧美在线123| 丁香六月综合激情| 亚洲综合在线观看视频| 欧美日本国产视频| 国产成人超碰人人澡人人澡| 一区二区三区四区视频精品免费 | 中文字幕精品三区| 在线一区二区三区四区五区| 视频在线观看一区二区三区| 久久先锋影音av鲁色资源网| 99视频精品全部免费在线| 日韩精品电影一区亚洲| 国产欧美精品区一区二区三区 | 热久久国产精品| 国产精品视频你懂的| 欧美一区二区三区四区久久| 成人国产精品免费网站| 欧美aⅴ一区二区三区视频| 一区在线观看视频| 日韩免费看的电影| 色哦色哦哦色天天综合| 国产精品一区在线观看你懂的| 一卡二卡三卡日韩欧美| 国产日本欧洲亚洲| 91精品国产91综合久久蜜臀| 99久久国产免费看| 国产高清在线精品| 美洲天堂一区二卡三卡四卡视频| 亚洲理论在线观看| 国产精品高潮呻吟| 国产亚洲女人久久久久毛片| 日韩精品一区二区在线| 欧美精品色一区二区三区| 91视频www| 成人久久视频在线观看| 激情深爱一区二区| 久久精品免费观看| 日韩av高清在线观看| 亚洲国产欧美一区二区三区丁香婷| 国产精品国产三级国产a| 久久久精品影视| 久久久久久久电影| 久久理论电影网| 精品日韩在线观看| 精品国产第一区二区三区观看体验| 欧美日韩精品系列| 欧美日韩高清在线| 欧美精品一级二级| 欧美精品 日韩| 欧美日韩国产乱码电影| 欧美理论在线播放| 日韩一区二区精品在线观看| 欧美精品aⅴ在线视频| 9191成人精品久久| 日韩欧美亚洲国产另类| www欧美成人18+| 国产日韩综合av| 亚洲日本韩国一区| 亚洲妇女屁股眼交7| 亚洲综合丝袜美腿| 日韩精品乱码av一区二区| 免费观看在线综合| 国内外精品视频| 不卡影院免费观看| 在线精品视频免费观看| 欧美日韩高清在线| 欧美成人艳星乳罩| 欧美激情综合五月色丁香小说| 久久精品视频一区二区| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 中文字幕欧美激情| 亚洲激情图片小说视频| 亚洲一区二区三区三| 免费人成精品欧美精品| 国产成人超碰人人澡人人澡| 99精品欧美一区二区三区小说| 欧美系列日韩一区| 欧美一级理论性理论a| 精品国产乱码久久久久久老虎| 国产欧美1区2区3区| 亚洲一二三区在线观看| 黄色精品一二区| 一本一道综合狠狠老| 欧美一区二区三区白人| 国产精品久久久久精k8| 午夜日韩在线电影| 国产传媒久久文化传媒| 欧美性高清videossexo| 国产拍欧美日韩视频二区| 亚洲宅男天堂在线观看无病毒| 国内精品久久久久影院薰衣草 | 日韩精品乱码av一区二区| 国产麻豆精品久久一二三| 99久久免费国产| 久久色在线观看| 亚洲国产成人高清精品| 国产成人欧美日韩在线电影| 欧美日韩卡一卡二| 中文字幕一区二区三区四区不卡| 日韩av在线发布| 欧美日韩在线播放一区|