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

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

?? buf.c

?? MINIX2.0操作系統(tǒng)源碼 MINIX2.0操作系統(tǒng)源碼
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/*
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)

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精三区欧美精三区| 日韩精品一区二区三区在线 | 亚洲男人的天堂一区二区| 欧美日本乱大交xxxxx| 成人性生交大片免费| 午夜精彩视频在线观看不卡| 中文av一区特黄| 精品久久久久久久一区二区蜜臀| 不卡欧美aaaaa| 国产麻豆91精品| 欧美a级一区二区| 一区二区三区久久| 国产丝袜欧美中文另类| 日韩手机在线导航| 欧美在线短视频| 972aa.com艺术欧美| 国产69精品久久久久毛片| 日韩电影一区二区三区| 亚洲综合丝袜美腿| 亚洲美女视频一区| 亚洲色图一区二区三区| 国产欧美日韩在线看| 337p粉嫩大胆噜噜噜噜噜91av| 欧美日韩一区二区三区四区| 99国产精品国产精品久久| 国产一区二区日韩精品| 久久国产日韩欧美精品| 婷婷丁香久久五月婷婷| 亚洲一区在线观看视频| 亚洲丝袜美腿综合| 亚洲欧美日韩系列| 樱桃视频在线观看一区| 亚洲猫色日本管| 一区二区三区四区乱视频| 中文字幕在线不卡一区二区三区| 亚洲国产精品t66y| 国产精品乱码一区二区三区软件| 国产精品三级电影| 国产精品久久99| 亚洲欧美一区二区在线观看| 中文字幕不卡三区| 国产精品久久免费看| 亚洲视频香蕉人妖| 一区二区久久久久久| 性做久久久久久免费观看欧美| 亚洲精品视频免费看| 亚洲午夜国产一区99re久久| 亚洲第一主播视频| 美腿丝袜一区二区三区| 国产麻豆91精品| caoporn国产精品| 欧美三日本三级三级在线播放| 欧美日韩国产成人在线免费| 日韩一区二区三区观看| 久久精品一级爱片| 亚洲丝袜制服诱惑| 日韩成人免费看| 国产盗摄精品一区二区三区在线| 国产ts人妖一区二区| 色婷婷亚洲婷婷| 欧美二区三区的天堂| 国产亚洲精品福利| 亚洲综合在线免费观看| 秋霞av亚洲一区二区三| 国产一区二区主播在线| 91在线视频观看| 欧美一区二区三区在线观看视频| 久久久久久久久久美女| 亚洲蜜臀av乱码久久精品| 美日韩一区二区三区| 国产91精品欧美| 欧美久久久久中文字幕| 国产亚洲欧美日韩在线一区| 综合久久给合久久狠狠狠97色 | 欧美日韩一级片网站| 欧美电影免费观看高清完整版在线观看| 精品国产第一区二区三区观看体验| 国产女人18毛片水真多成人如厕 | 色国产综合视频| 欧美一区二区黄| 亚洲国产精品传媒在线观看| 亚洲香蕉伊在人在线观| 韩国女主播一区二区三区| 97久久超碰精品国产| 91精品麻豆日日躁夜夜躁| 国产精品丝袜久久久久久app| 一区二区三区免费在线观看| 久久99久国产精品黄毛片色诱| aa级大片欧美| 日韩午夜激情av| 亚洲精品水蜜桃| 国产一区999| 在线播放亚洲一区| 中文字幕亚洲视频| 久久精品av麻豆的观看方式| 色婷婷一区二区| 国产色产综合色产在线视频| 午夜精品久久久久久久99水蜜桃| 国产精品一区二区无线| 在线观看av一区| 亚洲欧洲国产日本综合| 黑人精品欧美一区二区蜜桃| 欧美日本在线播放| 亚洲免费在线看| 国产成人无遮挡在线视频| 日韩一区二区在线看| 亚洲图片一区二区| 99久久精品免费精品国产| 久久久无码精品亚洲日韩按摩| 日本午夜一区二区| 欧美在线观看视频一区二区| 成人欧美一区二区三区黑人麻豆| 精品写真视频在线观看 | 欧美肥妇bbw| 亚洲综合激情另类小说区| 成人avav影音| 国产女同互慰高潮91漫画| 国产一区在线观看麻豆| 日韩无一区二区| 免费观看一级欧美片| 欧美日韩一区中文字幕| 亚洲国产欧美另类丝袜| 欧洲日韩一区二区三区| 夜夜揉揉日日人人青青一国产精品| 成人h动漫精品一区二区| 欧美极品另类videosde| 国产久卡久卡久卡久卡视频精品| 欧美一二三区在线| 日韩av一二三| 欧美一区二区性放荡片| 日本不卡在线视频| 欧美一级黄色大片| 色天天综合色天天久久| 国产精品福利av| 成人在线视频一区二区| 中文字幕亚洲欧美在线不卡| av资源网一区| 亚洲猫色日本管| 在线一区二区视频| 一区二区三区在线播放| 欧美亚洲国产bt| 日韩激情视频网站| 欧美xfplay| 国产二区国产一区在线观看| 国产精品美女一区二区在线观看| 福利91精品一区二区三区| 国产精品美女www爽爽爽| 日本电影亚洲天堂一区| 婷婷久久综合九色综合绿巨人| 日韩欧美国产综合| 国产精品一区免费视频| 亚洲视频在线一区| 欧美日韩激情一区二区| 日本人妖一区二区| 久久久久久亚洲综合影院红桃| 成人激情黄色小说| 亚洲美女一区二区三区| 91精品在线一区二区| 国产精品911| 一区二区日韩av| 日韩免费观看2025年上映的电影| 国产成人综合网| 亚洲嫩草精品久久| 日韩免费一区二区三区在线播放| 国产剧情一区二区| 亚洲在线免费播放| 日韩亚洲欧美成人一区| 国产成+人+日韩+欧美+亚洲| 一区二区免费在线播放| 欧美成人一级视频| 91视频免费看| 久久成人综合网| 亚洲精品国产精品乱码不99| 欧美电影免费观看高清完整版在| av成人老司机| 美腿丝袜一区二区三区| 亚洲品质自拍视频| 欧美电影免费观看高清完整版在线观看 | 在线欧美小视频| 久久精品av麻豆的观看方式| 日韩美女精品在线| 精品国产伦一区二区三区观看方式| 播五月开心婷婷综合| 五月天亚洲精品| 中文字幕av不卡| 在线播放中文一区| 91美女片黄在线观看91美女| 毛片av中文字幕一区二区| 亚洲免费观看高清完整版在线观看| 日韩亚洲欧美成人一区| 色屁屁一区二区| 国产福利视频一区二区三区| 亚洲第一成人在线| 国产精品的网站| 久久综合九色综合久久久精品综合| 欧洲中文字幕精品| 成人福利在线看| 国产一本一道久久香蕉| 三级欧美在线一区| 亚洲一区二区三区四区五区中文|