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

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

?? buf.c

?? MINIX2.0操作系統源碼 MINIX2.0操作系統源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
This file contains routines for buffer management.
*/

#include "inet.h"

#include <stdlib.h>
#include <string.h>

#include "generic/assert.h"
#include "generic/buf.h"
#include "generic/type.h"

INIT_PANIC();

#if TRACE_ENQUEUE_PROBLEM
extern enqueue_problem;
#endif

#define USE_MALLOCS	0

#ifndef BUF512_NR
#define BUF512_NR	(sizeof(int) == 2 ? 40 : 128)
#endif

#define ACC_NR		200
#define CLIENT_NR	5

typedef struct buf512
{
	buf_t buf_header;
	char buf_data[512];
} buf512_t;

#if USE_MALLOCS
PRIVATE buf512_t *buffers512;
PRIVATE acc_t *accessors;
#else
PRIVATE buf512_t buffers512[BUF512_NR];
PRIVATE acc_t accessors[ACC_NR];
#endif

PRIVATE buf512_t *buf512_free;

PRIVATE bf_freereq_t freereq[CLIENT_NR];
PRIVATE size_t bf_buf_gran;
PRIVATE acc_t *acc_free_list;

PUBLIC size_t bf_free_buffsize;
PUBLIC acc_t *bf_temporary_acc;


#ifdef bf_memreq
PUBLIC char *bf_memreq_file;
PUBLIC int bf_memreq_line;
#endif
#ifdef bf_cut
PUBLIC char *bf_cut_file;
PUBLIC int bf_cut_line;
#endif
#ifdef bf_packIffLess
PUBLIC char *bf_pack_file;
PUBLIC int bf_pack_line;
#endif
#ifdef bf_bufsize
PUBLIC char *bf_bufsize_file;
PUBLIC int bf_bufsize_line;
#endif

FORWARD acc_t *bf_small_memreq ARGS(( size_t size ));
FORWARD void bf_512free ARGS(( buf_t *buffer ));

PUBLIC void bf_init()
{
	int i;
	size_t size;
	size_t buf_s;

	bf_buf_gran= BUF_S;
	buf_s= 0;

#if USE_MALLOCS
	printf("buf.c: malloc %d 32K-buffers (%dK)\n", BUF32K_NR, 
		sizeof(*buffers32K) * BUF32K_NR / 1024);
	buffers32K= malloc(sizeof(*buffers32K) * BUF32K_NR);
	if (!buffers32K)
		ip_panic(( "unable to alloc 32K-buffers" ));
	printf("buf.c: malloc %d 2K-buffers (%dK)\n", BUF2K_NR, 
		sizeof(*buffers2K) * BUF2K_NR / 1024);
	buffers2K= malloc(sizeof(*buffers2K) * BUF2K_NR);
	if (!buffers2K)
		ip_panic(( "unable to alloc 2K-buffers" ));
	printf("buf.c: malloc %d 512-buffers (%dK)\n", BUF512_NR, 
		sizeof(*buffers512) * BUF512_NR / 1024);
	buffers512= malloc(sizeof(*buffers512) * BUF512_NR);
	if (!buffers512)
		ip_panic(( "unable to alloc 512-buffers" ));
	printf("buf.c: malloc %d accessors (%dK)\n", ACC_NR, 
		sizeof(*accessors) * ACC_NR / 1024);
	accessors= malloc(sizeof(*accessors) * ACC_NR);
	if (!accessors)
		ip_panic(( "unable to alloc accessors" ));
#endif

	for (i=0;i<BUF512_NR;i++)
	{
		buffers512[i].buf_header.buf_linkC= 0;
		buffers512[i].buf_header.buf_next= &buffers512[i+1];
		buffers512[i].buf_header.buf_free= bf_512free;
		buffers512[i].buf_header.buf_size= sizeof(buffers512[i].
			buf_data);
		buffers512[i].buf_header.buf_data_p= buffers512[i].buf_data;
	}
	buffers512[i-1].buf_header.buf_next= 0;
	buf512_free= &buffers512[0];
	if (sizeof(buffers512[0].buf_data) < bf_buf_gran)
		bf_buf_gran= sizeof(buffers512[0].buf_data);
	if (sizeof(buffers512[0].buf_data) > buf_s)
		buf_s= sizeof(buffers512[0].buf_data);

	for (i=0;i<ACC_NR;i++)
	{
		accessors[i].acc_linkC= 0;
		accessors[i].acc_next= &accessors[i+1];
	}
	acc_free_list= accessors;
	accessors[i-1].acc_next= 0;

	for (i=0;i<CLIENT_NR;i++)
		freereq[i]=0;

	assert (buf_s == BUF_S);
}

PUBLIC void bf_logon(func)
bf_freereq_t func;
{
	int i;

	for (i=0;i<CLIENT_NR;i++)
		if (!freereq[i])
		{
			freereq[i]=func;
			return;
		}

	ip_panic(( "buf.c: to many clients" ));
}

/*
bf_memreq
*/

#ifndef bf_memreq
PUBLIC acc_t *bf_memreq(size)
#else
PUBLIC acc_t *_bf_memreq(size)
#endif
size_t size;
{
	acc_t *head, *tail, *new_acc;
	int i,j;
	size_t count;

#if TRACE_ENQUEUE_PROBLEM
 { if (enqueue_problem)
  { where(); printf("bf_memreq(%d) called with enqueue_problem\n", size); } }
#endif
#ifdef bf_memreq
 { where(); printf("bf_memreq(%d) called by %s, %d\n", size, bf_memreq_file,
	bf_memreq_line); }
#endif
assert (size>0);

	head= NULL;
	while (size)
	{
		if (!acc_free_list)
		{
#if DEBUG
 { where(); printf("freeing accessors\n"); }
#endif
			for (i=0; !acc_free_list && i<MAX_BUFREQ_PRI; i++)
			{
				for (j=0; !acc_free_list && j<CLIENT_NR; j++)
				{
					bf_free_buffsize= 0;
					if (freereq[j])
						(*freereq[j])(i, BUF_S);
				}
			}
		}
		if (!acc_free_list)
			ip_panic(( "To few accessors" ));
		new_acc= acc_free_list;
		acc_free_list= acc_free_list->acc_next;
#if DEBUG & 256
 { where(); printf("got accessor %d\n", new_acc-accessors); }
#endif
		new_acc->acc_linkC= 1;
		new_acc->acc_buffer= 0;

#if DEBUG & 256
 { where(); printf("looking for 512 byte buffer\n"); }
#endif
		if (buf512_free)
		{
			buf512_t *buf512;

#if DEBUG & 256
 { where(); printf("found a 512 byte buffer\n"); }
#endif
			buf512= buf512_free;
			buf512_free= buf512->buf_header.buf_next;
assert (!buf512->buf_header.buf_linkC);
			buf512->buf_header.buf_linkC= 1;
assert (buf512->buf_header.buf_free == bf_512free);
assert (buf512->buf_header.buf_size == sizeof(buf512->buf_data));
assert (buf512->buf_header.buf_data_p == buf512->buf_data);
			new_acc->acc_buffer= &buf512->buf_header;
			buf512->buf_header.buf_next= buf512;
		}
#if DEBUG
		else
 { where(); printf("unable to find a 512 byte buffer\n"); }
#endif
		if (!new_acc->acc_buffer)
		{
#if DEBUG
 { where(); printf("freeing buffers\n"); }
#endif
			bf_free_buffsize= 0;
			for (i=0; bf_free_buffsize<size && i<MAX_BUFREQ_PRI;
				i++)
				for (j=0; bf_free_buffsize<size && j<CLIENT_NR;
					j++)
					if (freereq[j])
						(*freereq[j])(i, size);

			if (bf_free_buffsize<size)
				ip_panic(( "not enough buffers freed" ));

			continue;
		}


		if (!head)
			head= new_acc;
		else
			tail->acc_next= new_acc;
		tail= new_acc;

		count= tail->acc_buffer->buf_size;
		if (count > size)
			count= size;

		tail->acc_offset= 0;
		tail->acc_length=  count;
		size -= count;
	}
	tail->acc_next= 0;
#if DEBUG
bf_chkbuf(head);
#endif
#if DEBUG & 256
 { where(); printf("acc 0x%x has buffer 0x%x\n", head, head->acc_buffer); }
#endif
	return head;
}

/*
bf_small_memreq
*/

PRIVATE acc_t *bf_small_memreq(size)
size_t size;
{
	acc_t *head, *tail, *new_acc;
	int i,j;
	size_t count;

#if TRACE_ENQUEUE_PROBLEM
 { if (enqueue_problem)
  { where(); printf("bf_small_memreq(%d) called with enqueue_problem\n", size);
	} }
#endif
#if DEBUG & 256
 { where(); printf("bf_small_memreq(%d)\n", size); }
#endif

assert (size>0);

	head= NULL;
	while (size)
	{
		if (!acc_free_list)
		{
#if DEBUG
 { where(); printf("freeing accessors\n"); }
#endif
			for (i=0; !acc_free_list && i<MAX_BUFREQ_PRI; i++)
			{
				for (j=0; !acc_free_list && j<CLIENT_NR; j++)
				{
					bf_free_buffsize= 0;
					if (freereq[j])
						(*freereq[j])(i, BUF_S);
				}
			}
		}
		new_acc= acc_free_list;
		if (!new_acc)
			ip_panic(( "buf.c: out of accessors" ));
		acc_free_list= new_acc->acc_next;
#if DEBUG & 256
 { where(); printf("got accessor %d\n", new_acc-accessors); }
#endif
		new_acc->acc_linkC= 1;

		if (size >= sizeof(buf512_free->buf_data))
		{
			if (buf512_free)
			{
				buf512_t *buf512;

#if DEBUG & 256
 { where(); printf("found a 512 byte buffer\n"); }
#endif
				buf512= buf512_free;
				buf512_free= buf512->buf_header.buf_next;
assert (!buf512->buf_header.buf_linkC);
				buf512->buf_header.buf_linkC= 1;
assert (buf512->buf_header.buf_free == bf_512free);
assert (buf512->buf_header.buf_size == sizeof(buf512->buf_data));
assert (buf512->buf_header.buf_data_p == buf512->buf_data);
				new_acc->acc_buffer= &buf512->buf_header;
				buf512->buf_header.buf_next= buf512;
			}
			else
				break;
		}
		else
			break;

		if (!head)
			head= new_acc;
		else
			tail->acc_next= new_acc;
		tail= new_acc;

		count= tail->acc_buffer->buf_size;
		if (count > size)
			count= size;

		tail->acc_offset= 0;
		tail->acc_length=  count;
		size -= count;
	}
	if (size)
	{
		new_acc->acc_linkC= 0;
		new_acc->acc_next= acc_free_list;
		acc_free_list= new_acc;
		new_acc= bf_memreq(size);
		if (!head)
			head= new_acc;
		else
			tail->acc_next= new_acc;
	}
	else
		tail->acc_next= 0;
	return head;
}

PUBLIC void bf_afree(acc_ptr)
acc_t *acc_ptr;
{
	acc_t *tmp_acc;
	buf_t *tmp_buf;

	while (acc_ptr)
	{
assert (acc_ptr->acc_linkC);
		acc_ptr->acc_linkC--;
		if (!acc_ptr->acc_linkC)
		{
			tmp_buf= acc_ptr->acc_buffer;
assert (tmp_buf);
assert (tmp_buf->buf_linkC);
			if (!--tmp_buf->buf_linkC)
			{
				bf_free_buffsize += tmp_buf->buf_size;
				tmp_buf->buf_free(tmp_buf);
			}
			tmp_acc= acc_ptr;
			acc_ptr= acc_ptr->acc_next;
			tmp_acc->acc_next= acc_free_list;
			acc_free_list= tmp_acc;
		}
		else
			break;
	}
}

PUBLIC acc_t *bf_dupacc(acc_ptr)
register acc_t *acc_ptr;
{
	register acc_t *new_acc;
	int i, j;

#if TRACE_ENQUEUE_PROBLEM
 { if (enqueue_problem)
  { where(); printf("bf_dupacc(0x%x) called with enqueue_problem\n", acc_ptr);
	} }
#endif


	if (!acc_free_list)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲人精品一区| 国产麻豆一精品一av一免费| 91老师片黄在线观看| 中日韩av电影| 国产馆精品极品| 久久久久久麻豆| 国产在线播放一区二区三区| 91精品国产入口在线| 天天影视网天天综合色在线播放| 在线免费观看一区| 亚洲欧美偷拍卡通变态| 91免费观看视频在线| 亚洲精品中文字幕乱码三区| 91丨porny丨国产入口| 亚洲三级在线看| 一本色道亚洲精品aⅴ| 亚洲女女做受ⅹxx高潮| 在线免费不卡电影| 夜夜爽夜夜爽精品视频| 欧美视频一区二区三区四区| 亚洲一区二区欧美| 欧美日韩视频专区在线播放| 亚洲sss视频在线视频| 欧美久久久久久久久中文字幕| 天天免费综合色| 日韩免费看的电影| 国产老妇另类xxxxx| 国产午夜精品美女毛片视频| 风间由美性色一区二区三区| 中文一区一区三区高中清不卡| eeuss影院一区二区三区| 亚洲人成电影网站色mp4| 欧美日韩一区在线| 日本怡春院一区二区| 精品国产精品一区二区夜夜嗨| 国产乱妇无码大片在线观看| 国产精品久久久久影院亚瑟 | 成人白浆超碰人人人人| 亚洲视频一区二区免费在线观看| 91黄色免费观看| 视频一区二区三区中文字幕| 精品少妇一区二区三区日产乱码| 国产成a人无v码亚洲福利| 亚洲欧美一区二区三区久本道91| 欧美日韩国产bt| 国内外成人在线| **网站欧美大片在线观看| 欧美少妇性性性| 精品一二线国产| 国产精品高潮久久久久无| 精品视频全国免费看| 久久成人免费网| 亚洲色图视频网| 91精品国产综合久久福利软件| 国产精品中文欧美| 亚洲精品你懂的| 日韩欧美一级精品久久| 成人的网站免费观看| 丝袜美腿亚洲一区| 中文字幕国产一区二区| 欧美日韩在线一区二区| 国产精品一区免费在线观看| 亚洲免费三区一区二区| 日韩视频一区二区三区| 99热精品国产| 久久精品国内一区二区三区| 国产精品成人在线观看| 日韩欧美在线综合网| 97se亚洲国产综合自在线| 免费在线看一区| 亚洲欧洲制服丝袜| 2021国产精品久久精品| 91国偷自产一区二区三区成为亚洲经典| 蜜臀精品一区二区三区在线观看 | 91福利在线观看| 国产一区二区伦理| 亚洲一区免费观看| 国产日韩欧美激情| 欧美精品久久久久久久久老牛影院| 风流少妇一区二区| 免费人成黄页网站在线一区二区| 亚洲欧美一区二区久久| 久久色.com| 欧美精品电影在线播放| 91小视频免费观看| 国产乱子伦视频一区二区三区| 亚洲国产精品久久不卡毛片 | 国产精品私人影院| 欧美一区二区在线视频| 91亚洲资源网| 国产酒店精品激情| 日韩精品1区2区3区| 亚洲婷婷在线视频| 国产亚洲成年网址在线观看| 欧美肥妇毛茸茸| 在线国产亚洲欧美| 99re视频精品| 成人综合在线观看| 精品在线一区二区三区| 亚洲国产中文字幕| 亚洲欧美视频一区| 国产精品久久久久久久久免费相片| 精品免费视频.| 6080午夜不卡| 欧美性感一类影片在线播放| 成人午夜视频在线观看| 激情深爱一区二区| 奇米精品一区二区三区在线观看| 一区二区免费看| 国产精品美女久久久久久| 精品国产露脸精彩对白| 日韩欧美一区电影| 欧美一区二区三区免费观看视频| 欧美系列在线观看| 91麻豆免费看| eeuss鲁片一区二区三区在线看| 国产成人综合在线观看| 激情久久久久久久久久久久久久久久| 午夜精品久久久| 亚洲国产综合在线| 日本高清不卡在线观看| 91蜜桃视频在线| 色综合久久综合网97色综合| 不卡的av网站| 成人av在线一区二区| 成人美女视频在线看| 成人午夜大片免费观看| 国产成人综合亚洲91猫咪| 国产精品一区二区免费不卡| 国产综合久久久久影院| 精品午夜一区二区三区在线观看| 青草av.久久免费一区| 日产国产欧美视频一区精品 | 日韩中文字幕区一区有砖一区| 艳妇臀荡乳欲伦亚洲一区| 亚洲精品国产一区二区精华液 | 欧美日本国产一区| 欧美色图在线观看| 欧美年轻男男videosbes| 欧美日韩不卡在线| 91精品国产丝袜白色高跟鞋| 日韩一区二区精品在线观看| 欧美大片免费久久精品三p| 欧美不卡一区二区三区| 精品国产乱码久久久久久免费| 亚洲精品在线免费播放| 国产日韩欧美精品在线| 国产精品福利一区二区| 亚洲精品国产无天堂网2021| 亚洲成人中文在线| 蜜臀av性久久久久蜜臀aⅴ流畅| 久久国产精品第一页| 国产一区二区毛片| 99精品欧美一区二区三区综合在线| 99re热这里只有精品免费视频| 色婷婷久久99综合精品jk白丝 | 99精品黄色片免费大全| 色婷婷精品久久二区二区蜜臀av| 欧美视频一二三区| 欧美电视剧免费全集观看| 欧美国产一区二区| 欧美丝袜第三区| 日韩一级视频免费观看在线| 国产亚洲一区字幕| 亚洲精品高清在线观看| 午夜电影一区二区三区| 久草热8精品视频在线观看| 盗摄精品av一区二区三区| 色系网站成人免费| 在线综合视频播放| 久久久一区二区| 亚洲欧美日韩一区二区| 日本v片在线高清不卡在线观看| 国产真实乱偷精品视频免| 不卡视频在线观看| 欧美精品在欧美一区二区少妇| 欧美变态口味重另类| 亚洲丝袜美腿综合| 全部av―极品视觉盛宴亚洲| 高清免费成人av| 欧美日韩久久久| 久久精品在线观看| 一区二区三区自拍| 久久97超碰色| 91官网在线免费观看| 精品国产乱码久久久久久免费| 亚洲天堂a在线| 免费久久精品视频| 99久久婷婷国产综合精品电影 | 精品国产亚洲在线| 亚洲欧美日韩国产综合| 美女一区二区久久| 91看片淫黄大片一级| 欧美大尺度电影在线| 亚洲色图欧洲色图婷婷| 美腿丝袜亚洲一区| 欧美羞羞免费网站| 亚洲国产精品av| 亚洲成av人片一区二区梦乃| 美女视频网站久久|