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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? messages.c

?? 一個Windows下的Linux專用虛擬機
?? C
字號:
/* * This source code is a part of coLinux source package. * * Dan Aloni <da-x@colinux.org>, 2003-2004 (c) * * The code is licensed under the GPL. See the COPYING file at * the root directory. */#include <colinux/os/current/memory.h>#include <colinux/os/alloc.h>#include "messages.h"#define co_debug_lvl_route(msg, from, to, level, fmt, ...) do {	\    co_module_name_t from_str;						\    co_module_name_t to_str;						\    									\    co_debug_lvl(messages, level, msg " %s -> %s: " fmt,		\		 co_module_repr(from, &from_str),			\		 co_module_repr(to, &to_str),				\		 ## __VA_ARGS__);					\} while (0);#define co_debug_lvl_message(message, level, fmt, ...)			\	co_debug_lvl_route("route", message->from, message->to, level, fmt, ## __VA_ARGS__)void co_message_switch_init(co_message_switch_t *ms, co_module_t switch_id){	co_list_init(&ms->list);	ms->switch_id = switch_id;}co_rc_t co_message_switch_set_rule(co_message_switch_t *ms, co_module_t destination,				   co_switch_rule_func_t func, void *data){	co_switch_rule_t *rule;	co_module_name_t destination_str;	rule = co_os_malloc(sizeof(*rule));	if (rule == NULL)		return CO_RC(OUT_OF_MEMORY);	rule->type = CO_SWITCH_RULE_TYPE_CALLBACK;	rule->destination = destination;	rule->data = data;	rule->func = func;	co_debug_lvl(messages, 5, "setting callback rule for %s", co_module_repr(destination, &destination_str));	co_list_add_head(&rule->node, &ms->list);	return CO_RC_OK;}co_rc_t co_message_switch_set_rule_reroute(co_message_switch_t *ms, co_module_t destination, co_module_t new_destination){	co_switch_rule_t *rule;	rule = co_os_malloc(sizeof(*rule));	if (rule == NULL)		return CO_RC(OUT_OF_MEMORY);	rule->type = CO_SWITCH_RULE_TYPE_REROUTE;	rule->destination = destination;	rule->reroute_destination = new_destination;	co_debug_lvl_route("reroute rule", destination, new_destination, 11, "\n");	co_list_add_head(&rule->node, &ms->list);	return CO_RC_OK;}co_rc_t co_message_switch_cb_add_to_queue(void *data, co_message_t *message){	co_queue_t *queue = (typeof(queue))data;	co_message_queue_item_t *queue_item = NULL;	co_rc_t rc = CO_RC_OK;	rc = co_queue_malloc(queue, sizeof(co_message_queue_item_t), (void **)&queue_item);	if (!CO_OK(rc)) {		co_os_free(message);		return rc;	}	co_debug_lvl_message(message, 11, "adding to queue %p", queue);	queue_item->message = message;	co_queue_add_head(queue, queue_item);		return CO_RC_OK;}co_rc_t co_message_switch_set_rule_queue(co_message_switch_t *ms, co_module_t destination, 					 co_queue_t *queue){	return co_message_switch_set_rule(ms, destination, 					  co_message_switch_cb_add_to_queue,					  queue);}co_rc_t co_message_switch_get_rule(co_message_switch_t *ms, co_module_t destination,				   co_switch_rule_t **out_rule){	co_switch_rule_t *rule = NULL;	co_list_each_entry(rule, &ms->list, node) {		if (destination == rule->destination) {			*out_rule = rule;			return CO_RC(OK);		}	}		return CO_RC(ERROR);}bool_t co_message_switch_rule_exists(co_message_switch_t *ms, co_module_t destination){	co_switch_rule_t *rule = NULL;	co_rc_t rc;		rc = co_message_switch_get_rule(ms, destination, &rule);	if (!CO_OK(rc))		return PFALSE;	return PTRUE;}co_rc_t co_message_switch_message(co_message_switch_t *ms, co_message_t *message){	co_switch_rule_t *rule = NULL;	co_rc_t rc = CO_RC(OK);	if (message->to == ms->switch_id) {		co_switch_message_t *switch_message;		/* A message for me */		if (message->size != sizeof(co_switch_message_t)) {			co_debug_lvl_message(message, 4, "bad message size (%ld != %d)", message->size,  sizeof(co_switch_message_t));			goto out_free_error;		}				switch_message = (co_switch_message_t *)message->data;		switch (switch_message->type) {		case CO_SWITCH_MESSAGE_SET_REROUTE_RULE:			rc = co_message_switch_set_rule_reroute(ms, switch_message->destination,								switch_message->reroute_destination);			break;		case CO_SWITCH_MESSAGE_FREE_RULE:			rc = co_message_switch_free_rule(ms, switch_message->destination);			break;		default:			co_debug_lvl_message(message, 4, "bad switch message type (%d)", switch_message->type);			goto out_free_error;		}		goto out_free;	}		rc = co_message_switch_get_rule(ms, message->to, &rule);	if (CO_OK(rc)) {		if (rule->type == CO_SWITCH_RULE_TYPE_REROUTE) {			rc = co_message_switch_get_rule(ms, rule->reroute_destination, &rule);			if (!CO_OK(rc))				goto out_free_error;		}		if (rule->type == CO_SWITCH_RULE_TYPE_CALLBACK)			return rule->func(rule->data, message);	}out_free_error:	co_debug_lvl_message(message, 11, "freed message");out_free:	co_os_free(message);	return rc;}co_rc_t co_message_switch_free_rule(co_message_switch_t *ms, co_module_t destination){	co_switch_rule_t *rule = NULL;	co_module_name_t destination_str;	co_rc_t rc;	rc = co_message_switch_get_rule(ms, destination, &rule);	if (!CO_OK(rc))		return rc;	co_debug_lvl(messages, 5, "freeing rule for %s", co_module_repr(destination, &destination_str));	co_list_del(&rule->node);	co_os_free(rule);	return CO_RC(OK);}void co_message_switch_free(co_message_switch_t *ms){	co_switch_rule_t *rule;	while (!co_list_empty(&ms->list)) {		rule = co_list_entry(ms->list.next, co_switch_rule_t, node);		co_list_del(&rule->node);			co_os_free(rule);	}}co_rc_t co_message_dup(co_message_t *message, co_message_t **dup_message_out){	unsigned long size; 	co_message_t *allocated;		size = sizeof(*message) + message->size;		allocated = co_os_malloc(size);	if (allocated == NULL)		return CO_RC(OUT_OF_MEMORY);	memcpy(allocated, message, size);	*dup_message_out = allocated;		return CO_RC(OK);}co_rc_t co_message_dup_to_queue(co_message_t *message, co_queue_t *queue){	co_message_t *dup_message;	co_rc_t rc;		rc = co_message_dup(message, &dup_message);	if (CO_OK(rc)) {		co_message_queue_item_t *queue_item = NULL;				rc = co_queue_malloc(queue, sizeof(co_message_queue_item_t), (void **)&queue_item);		if (!CO_OK(rc)) {			co_os_free(dup_message);		} else {						queue_item->message = dup_message;			co_queue_add_head(queue, queue_item);		}	}	return rc;}co_rc_t co_message_switch_dup_message(co_message_switch_t *ms, co_message_t *message){	co_rc_t rc;	co_message_t *copy;	rc = co_message_dup(message, &copy);	if (!CO_OK(rc))					return rc;		return co_message_switch_message(ms, copy);}co_rc_t co_message_write_queue(co_queue_t *queue, char *buffer, unsigned long size,			       unsigned long *sent_count, unsigned long *sent_size){	char *buffer_writeptr = buffer;	unsigned long size_left = size;	unsigned long queue_items;	co_rc_t rc;	queue_items = co_queue_size(queue);	while (queue_items > 0) {		co_message_queue_item_t *message_item;		unsigned long total_size;		co_message_t *message;					rc = co_queue_pop_tail(queue, (void **)&message_item);		if (!CO_OK(rc))			break;		message = message_item->message;		total_size = message->size + sizeof(*message);		if (total_size > size_left) {			co_queue_add_tail(queue, message_item);			break;		}									memcpy(buffer_writeptr, message, total_size);		queue_items -= 1;		size_left -= total_size;		buffer_writeptr += total_size;		*sent_count += 1;		co_queue_free(queue,  message_item);		co_os_free(message);	}	*sent_size = buffer_writeptr - buffer;	return CO_RC(OK);}char *co_module_repr(co_module_t module, co_module_name_t *str){	switch (module) {	case CO_MODULE_LINUX: co_snprintf((char *)str, sizeof(*str), "monitor"); break;	case CO_MODULE_MONITOR: co_snprintf((char *)str, sizeof(*str), "monitor"); break;	case CO_MODULE_DAEMON: co_snprintf((char *)str, sizeof(*str), "daemon"); break;	case CO_MODULE_IDLE: co_snprintf((char *)str, sizeof(*str), "idle"); break;	case CO_MODULE_KERNEL_SWITCH: co_snprintf((char *)str, sizeof(*str), "kernel"); break;	case CO_MODULE_USER_SWITCH: co_snprintf((char *)str, sizeof(*str), "user"); break;	case CO_MODULE_CONSOLE: co_snprintf((char *)str, sizeof(*str), "console"); break;	case CO_MODULE_PRINTK: co_snprintf((char *)str, sizeof(*str), "printk"); break;	case CO_MODULE_CONET0...CO_MODULE_CONET_END - 1:		co_snprintf((char *)str, sizeof(*str), "net%d", module - CO_MODULE_CONET0); 		break;	case CO_MODULE_COBD0...CO_MODULE_COBD_END - 1:		co_snprintf((char *)str, sizeof(*str), "cobd%d", module - CO_MODULE_COBD0); 		break;	case CO_MODULE_SERIAL0...CO_MODULE_SERIAL_END - 1:		co_snprintf((char *)str, sizeof(*str), "serial%d", module - CO_MODULE_SERIAL0); 		break;	default:		co_snprintf((char *)str, sizeof(*str), "unknown<%d>", module);	}	return (char *)str;}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
caoporn国产一区二区| 国产在线播精品第三| 99精品一区二区| 中文字幕亚洲一区二区av在线| 成人91在线观看| 亚洲综合色自拍一区| 9191国产精品| 久久99精品久久只有精品| 久久精品一区二区三区四区| 国产999精品久久久久久绿帽| 日本一区二区三区四区 | www成人在线观看| 国产精品一区在线观看乱码 | 欧美高清hd18日本| 热久久一区二区| 国产日韩欧美精品综合| 97久久精品人人澡人人爽| 九九**精品视频免费播放| 中文字幕日本不卡| 欧美日本韩国一区| 国产精品123区| 亚洲综合无码一区二区| 欧美哺乳videos| 99精品国产99久久久久久白柏 | 欧美高清视频一二三区 | 国产日本亚洲高清| 91免费精品国自产拍在线不卡 | 奇米在线7777在线精品| 久久久噜噜噜久久中文字幕色伊伊 | 成人欧美一区二区三区1314 | 精品亚洲成av人在线观看| 国产欧美一区二区三区在线看蜜臀| 91丨九色丨国产丨porny| 免费三级欧美电影| 亚洲欧美激情一区二区| 亚洲精品一区二区在线观看| 色欧美88888久久久久久影院| 免费在线观看日韩欧美| 成人欧美一区二区三区在线播放| 日韩一区二区三区在线观看| 不卡一区二区在线| 久久se这里有精品| 亚洲妇女屁股眼交7| 国产欧美在线观看一区| 欧美一区二区视频在线观看| av中文字幕亚洲| 精品制服美女丁香| 亚洲高清免费一级二级三级| 国产精品免费视频一区| 欧美精品一区二区三区蜜桃| 欧美日韩国产一区二区三区地区| 成人手机在线视频| 国产伦理精品不卡| 七七婷婷婷婷精品国产| 本田岬高潮一区二区三区| 蜜臀av性久久久久av蜜臀妖精| 亚洲精品久久久蜜桃| 国产精品久久久久久久久免费桃花 | 日本亚洲最大的色成网站www| 亚洲美女免费视频| 成人欧美一区二区三区1314 | av中文字幕亚洲| 国产夫妻精品视频| 韩国女主播成人在线| 日本三级韩国三级欧美三级| 亚洲成a人片综合在线| 亚洲精选视频在线| 一区二区在线观看av| 中文字幕在线视频一区| 国产精品网站在线| 中文字幕欧美区| 国产偷国产偷亚洲高清人白洁 | 亚洲成年人网站在线观看| 亚洲美女淫视频| 亚洲精品成人在线| 亚洲女同一区二区| 亚洲最大成人网4388xx| 亚洲黄网站在线观看| 尤物视频一区二区| 亚洲国产精品一区二区久久恐怖片 | 国产中文一区二区三区| 激情综合网最新| 黑人巨大精品欧美一区| 国产综合色视频| 国产盗摄精品一区二区三区在线 | 天天爽夜夜爽夜夜爽精品视频| 亚洲444eee在线观看| 日本三级亚洲精品| 狠狠色狠狠色综合| 成人黄色网址在线观看| 色婷婷综合久色| 91.com在线观看| 日韩免费一区二区| 久久网这里都是精品| 亚洲欧美在线视频| 亚洲成人动漫精品| 激情六月婷婷久久| 成人免费看视频| 欧美在线一区二区| 欧美刺激脚交jootjob| 国产欧美日韩另类视频免费观看 | 欧美精品一区二区不卡| 国产精品乱人伦一区二区| 有坂深雪av一区二区精品| 人人超碰91尤物精品国产| 国产高清精品久久久久| 久久久.com| 国产精品萝li| 日日摸夜夜添夜夜添精品视频| 黄页视频在线91| 不卡电影免费在线播放一区| 欧美三区免费完整视频在线观看| 日韩欧美中文字幕制服| 最新国产成人在线观看| 视频一区在线播放| 成人激情小说乱人伦| 91精品国产综合久久久久久| 国产精品嫩草影院av蜜臀| 五月婷婷综合网| 成人永久aaa| 欧美久久久影院| 国产精品久久久久久久第一福利| 日韩国产一区二| 99re成人在线| 久久中文字幕电影| 亚洲18女电影在线观看| 国产成人精品免费一区二区| 欧美精品第一页| 国产精品久久久久aaaa樱花 | 国产精品久久久久影院老司 | 在线观看国产一区二区| 久久久久99精品国产片| 亚洲国产日韩在线一区模特 | 99综合电影在线视频| 欧美一区二区视频观看视频| 亚洲欧美另类小说| 韩日精品视频一区| 欧美在线播放高清精品| 国产精品久久久久久亚洲毛片| 久久99热99| 欧美浪妇xxxx高跟鞋交| 亚洲免费在线看| 成人app在线| 国产网站一区二区三区| 麻豆精品视频在线观看| 欧美美女一区二区在线观看| 综合欧美亚洲日本| 国产成人激情av| 欧美mv日韩mv国产网站app| 丝袜脚交一区二区| 91蜜桃视频在线| 中文字幕一区二区三区精华液 | 欧美日韩一级片网站| 亚洲人成网站精品片在线观看 | 自拍偷拍亚洲欧美日韩| 国产成人精品免费视频网站| 精品捆绑美女sm三区| 麻豆91在线播放免费| 91精品国产全国免费观看| 午夜精品久久久久久久99水蜜桃| 色婷婷狠狠综合| 一区二区视频免费在线观看| 99久久99久久久精品齐齐| 国产精品色在线观看| 成人久久18免费网站麻豆| 亚洲国产精品黑人久久久| 国产a精品视频| 国产精品欧美一区二区三区| 91精品在线免费| 午夜激情一区二区| 欧美美女网站色| 日韩激情av在线| 欧美一二三区精品| 韩国一区二区在线观看| 久久美女艺术照精彩视频福利播放| 国产一区欧美二区| 国产人成亚洲第一网站在线播放| 国产69精品一区二区亚洲孕妇| 国产精品视频观看| 成人av免费在线观看| 亚洲精品美腿丝袜| 欧美日韩第一区日日骚| 免费不卡在线观看| 精品国产91乱码一区二区三区| 国内精品久久久久影院色| 中文av一区二区| 在线观看网站黄不卡| 香蕉乱码成人久久天堂爱免费| 制服丝袜亚洲网站| 国产在线播放一区| 国产精品久久久久三级| 欧美最新大片在线看| 免费观看在线综合| 久久先锋影音av| 色综合天天做天天爱| 三级欧美韩日大片在线看| 久久综合九色综合97婷婷女人 | 色天使色偷偷av一区二区| 日韩精品五月天| 国产色婷婷亚洲99精品小说|