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

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

?? buff.c

?? 這是一個同樣來自貝爾實驗室的和UNIX有著淵源的操作系統, 其簡潔的設計和實現易于我們學習和理解
?? C
字號:
#include "sam.h"enum{	Slop = 100,	/* room to grow with reallocation */};staticvoidsizecache(Buffer *b, uint n){	if(n <= b->cmax)		return;	b->cmax = n+Slop;	b->c = runerealloc(b->c, b->cmax);}staticvoidaddblock(Buffer *b, uint i, uint n){	if(i > b->nbl)		panic("internal error: addblock");	b->bl = realloc(b->bl, (b->nbl+1)*sizeof b->bl[0]);	if(i < b->nbl)		memmove(b->bl+i+1, b->bl+i, (b->nbl-i)*sizeof(Block*));	b->bl[i] = disknewblock(disk, n);	b->nbl++;}staticvoiddelblock(Buffer *b, uint i){	if(i >= b->nbl)		panic("internal error: delblock");	diskrelease(disk, b->bl[i]);	b->nbl--;	if(i < b->nbl)		memmove(b->bl+i, b->bl+i+1, (b->nbl-i)*sizeof(Block*));	b->bl = realloc(b->bl, b->nbl*sizeof b->bl[0]);}/* * Move cache so b->cq <= q0 < b->cq+b->cnc. * If at very end, q0 will fall on end of cache block. */staticvoidflush(Buffer *b){	if(b->cdirty || b->cnc==0){		if(b->cnc == 0)			delblock(b, b->cbi);		else			diskwrite(disk, &b->bl[b->cbi], b->c, b->cnc);		b->cdirty = FALSE;	}}staticvoidsetcache(Buffer *b, uint q0){	Block **blp, *bl;	uint i, q;	if(q0 > b->nc)		panic("internal error: setcache");	/*	 * flush and reload if q0 is not in cache.	 */	if(b->nc == 0 || (b->cq<=q0 && q0<b->cq+b->cnc))		return;	/*	 * if q0 is at end of file and end of cache, continue to grow this block	 */	if(q0==b->nc && q0==b->cq+b->cnc && b->cnc<=Maxblock)		return;	flush(b);	/* find block */	if(q0 < b->cq){		q = 0;		i = 0;	}else{		q = b->cq;		i = b->cbi;	}	blp = &b->bl[i];	while(q+(*blp)->n <= q0 && q+(*blp)->n < b->nc){		q += (*blp)->n;		i++;		blp++;		if(i >= b->nbl)			panic("block not found");	}	bl = *blp;	/* remember position */	b->cbi = i;	b->cq = q;	sizecache(b, bl->n);	b->cnc = bl->n;	/*read block*/	diskread(disk, bl, b->c, b->cnc);}voidbufinsert(Buffer *b, uint q0, Rune *s, uint n){	uint i, m, t, off;	if(q0 > b->nc)		panic("internal error: bufinsert");	while(n > 0){		setcache(b, q0);		off = q0-b->cq;		if(b->cnc+n <= Maxblock){			/* Everything fits in one block. */			t = b->cnc+n;			m = n;			if(b->bl == nil){	/* allocate */				if(b->cnc != 0)					panic("internal error: bufinsert1 cnc!=0");				addblock(b, 0, t);				b->cbi = 0;			}			sizecache(b, t);			runemove(b->c+off+m, b->c+off, b->cnc-off);			runemove(b->c+off, s, m);			b->cnc = t;			goto Tail;		}		/*		 * We must make a new block.  If q0 is at		 * the very beginning or end of this block,		 * just make a new block and fill it.		 */		if(q0==b->cq || q0==b->cq+b->cnc){			if(b->cdirty)				flush(b);			m = min(n, Maxblock);			if(b->bl == nil){	/* allocate */				if(b->cnc != 0)					panic("internal error: bufinsert2 cnc!=0");				i = 0;			}else{				i = b->cbi;				if(q0 > b->cq)					i++;			}			addblock(b, i, m);			sizecache(b, m);			runemove(b->c, s, m);			b->cq = q0;			b->cbi = i;			b->cnc = m;			goto Tail;		}		/*		 * Split the block; cut off the right side and		 * let go of it.		 */		m = b->cnc-off;		if(m > 0){			i = b->cbi+1;			addblock(b, i, m);			diskwrite(disk, &b->bl[i], b->c+off, m);			b->cnc -= m;		}		/*		 * Now at end of block.  Take as much input		 * as possible and tack it on end of block.		 */		m = min(n, Maxblock-b->cnc);		sizecache(b, b->cnc+m);		runemove(b->c+b->cnc, s, m);		b->cnc += m;  Tail:		b->nc += m;		q0 += m;		s += m;		n -= m;		b->cdirty = TRUE;	}}voidbufdelete(Buffer *b, uint q0, uint q1){	uint m, n, off;	if(!(q0<=q1 && q0<=b->nc && q1<=b->nc))		panic("internal error: bufdelete");	while(q1 > q0){		setcache(b, q0);		off = q0-b->cq;		if(q1 > b->cq+b->cnc)			n = b->cnc - off;		else			n = q1-q0;		m = b->cnc - (off+n);		if(m > 0)			runemove(b->c+off, b->c+off+n, m);		b->cnc -= n;		b->cdirty = TRUE;		q1 -= n;		b->nc -= n;	}}uintbufload(Buffer *b, uint q0, int fd, int *nulls){	char *p;	Rune *r;	int l, m, n, nb, nr;	uint q1;	if(q0 > b->nc)		panic("internal error: bufload");	p = malloc((Maxblock+UTFmax+1)*sizeof p[0]);	if(p == nil)		panic("bufload: malloc failed");	r = runemalloc(Maxblock);	m = 0;	n = 1;	q1 = q0;	/*	 * At top of loop, may have m bytes left over from	 * last pass, possibly representing a partial rune.	 */	while(n > 0){		n = read(fd, p+m, Maxblock);		if(n < 0){			error(Ebufload);			break;		}		m += n;		p[m] = 0;		l = m;		if(n > 0)			l -= UTFmax;		cvttorunes(p, l, r, &nb, &nr, nulls);		memmove(p, p+nb, m-nb);		m -= nb;		bufinsert(b, q1, r, nr);		q1 += nr;	}	free(p);	free(r);	return q1-q0;}voidbufread(Buffer *b, uint q0, Rune *s, uint n){	uint m;	if(!(q0<=b->nc && q0+n<=b->nc))		panic("bufread: internal error");	while(n > 0){		setcache(b, q0);		m = min(n, b->cnc-(q0-b->cq));		runemove(s, b->c+(q0-b->cq), m);		q0 += m;		s += m;		n -= m;	}}voidbufreset(Buffer *b){	int i;	b->nc = 0;	b->cnc = 0;	b->cq = 0;	b->cdirty = 0;	b->cbi = 0;	/* delete backwards to avoid n2 behavior */	for(i=b->nbl-1; --i>=0; )		delblock(b, i);}voidbufclose(Buffer *b){	bufreset(b);	free(b->c);	b->c = nil;	b->cnc = 0;	free(b->bl);	b->bl = nil;	b->nbl = 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美激情综合网| 国产精品1024久久| 色综合久久久久网| 久久久久88色偷偷免费| 久久99精品久久只有精品| 91色porny在线视频| 亚洲精品成人a在线观看| 99精品视频在线播放观看| 国产精品乱人伦中文| 国产成人精品免费视频网站| 国产日韩av一区| 成人午夜激情视频| 最新久久zyz资源站| 99国产精品国产精品毛片| 国产精品你懂的| 在线观看一区不卡| 美女精品自拍一二三四| 久久久一区二区三区捆绑**| 高清不卡一区二区在线| 国产精品久久久久久久蜜臀| 99国产精品国产精品毛片| 亚洲一卡二卡三卡四卡无卡久久| 精品视频一区二区三区免费| 免费在线观看一区| 国产亚洲欧美日韩在线一区| 成人美女在线观看| 一区二区三区产品免费精品久久75| 色伊人久久综合中文字幕| 五月天一区二区| 国产亚洲va综合人人澡精品| 欧美性受xxxx| 国产**成人网毛片九色 | 夜夜操天天操亚洲| 日韩欧美精品在线| 色哟哟国产精品| 麻豆免费看一区二区三区| 成人欧美一区二区三区小说 | 国产成人小视频| 日韩黄色在线观看| 亚洲成a人片在线观看中文| 国产视频一区在线播放| 欧美v日韩v国产v| 日本精品裸体写真集在线观看| 麻豆成人av在线| 91精品国产综合久久久久久 | 国产日韩一级二级三级| 欧美日韩大陆一区二区| 99在线视频精品| 紧缚奴在线一区二区三区| 午夜视频在线观看一区二区三区| 欧美国产日韩在线观看| 久久精品亚洲精品国产欧美| 宅男在线国产精品| 91精品国产综合久久婷婷香蕉 | 不卡av在线免费观看| 激情av综合网| 成人国产精品免费网站| 韩国视频一区二区| 成人午夜碰碰视频| 成人涩涩免费视频| 色综合天天性综合| 在线视频欧美精品| 欧美亚洲综合网| 欧美精品久久99久久在免费线 | 国产精品国产精品国产专区不片| 日韩欧美精品在线视频| 精品国产一区二区三区av性色| 久久久久久影视| 国产精品成人免费精品自在线观看| 日本一区二区不卡视频| 亚洲色图第一区| 肉丝袜脚交视频一区二区| 奇米精品一区二区三区四区 | 亚洲一区二区精品久久av| 水蜜桃久久夜色精品一区的特点| 麻豆精品一区二区| 91福利国产精品| 日本一区二区免费在线| 亚洲成人久久影院| av欧美精品.com| 欧美精品 国产精品| 2欧美一区二区三区在线观看视频| 欧美激情一区二区三区蜜桃视频| 天天综合天天做天天综合| 国产成人精品亚洲午夜麻豆| 欧美精品一级二级| 亚洲欧洲日产国产综合网| 美女被吸乳得到大胸91| 欧美最猛性xxxxx直播| 久久久激情视频| 极品少妇xxxx精品少妇| 51精品久久久久久久蜜臀| 亚洲欧美福利一区二区| 国产91精品久久久久久久网曝门| 欧美肥妇毛茸茸| 一级精品视频在线观看宜春院| 国产91综合一区在线观看| 日韩三级精品电影久久久| 亚洲成人久久影院| 欧美亚洲一区二区在线观看| 亚洲欧美综合网| 91日韩精品一区| 夜夜嗨av一区二区三区中文字幕| 99久久精品国产毛片| 亚洲精品国产无天堂网2021| 97久久久精品综合88久久| 亚洲少妇中出一区| 在线观看成人小视频| 亚洲伦理在线精品| 欧美日韩午夜在线| 蜜臀av亚洲一区中文字幕| 欧美一区二区二区| 精品一区二区三区免费视频| 26uuu久久综合| 91在线国产福利| 亚洲成人tv网| 久久久亚洲精品石原莉奈| 福利视频网站一区二区三区| 亚洲欧洲国产日韩| 欧美亚洲高清一区| 免费人成网站在线观看欧美高清| 精品久久99ma| 91久久一区二区| 看片的网站亚洲| 一区二区三区四区亚洲| 日韩欧美成人一区| 色88888久久久久久影院按摩| 手机精品视频在线观看| 国产精品免费丝袜| 欧美成人三级在线| 色香蕉久久蜜桃| 国产精品99久久不卡二区| 一区二区成人在线视频| 久久美女艺术照精彩视频福利播放| 色94色欧美sute亚洲线路一久 | 91丨九色丨黑人外教| 久久精品国内一区二区三区 | 精品国产污污免费网站入口| 欧美综合一区二区| 91福利视频网站| 成人黄动漫网站免费app| 国产在线一区二区综合免费视频| 亚洲自拍偷拍网站| 亚洲视频电影在线| 17c精品麻豆一区二区免费| 久久久久国产精品麻豆| 亚洲精品一区二区三区在线观看| 欧美视频中文一区二区三区在线观看| 成人sese在线| 97se亚洲国产综合自在线不卡| 国产精品白丝av| 国产成人免费视频| 成人听书哪个软件好| 国产成人免费视频网站| 春色校园综合激情亚洲| 成人中文字幕合集| 99久久精品国产精品久久| 成人动漫av在线| av午夜一区麻豆| 欧美视频三区在线播放| 欧美日韩一级大片网址| 欧美精品色综合| 国产性做久久久久久| 18涩涩午夜精品.www| 亚洲图片一区二区| 韩国成人在线视频| 成人av资源站| 欧美人与z0zoxxxx视频| 26uuu亚洲| 午夜日韩在线观看| 国产99久久久国产精品潘金网站| 一本大道综合伊人精品热热 | 国产精品一区一区三区| 91行情网站电视在线观看高清版| 天堂午夜影视日韩欧美一区二区| 国产婷婷色一区二区三区四区 | 色香蕉成人二区免费| 91麻豆精品国产91久久久久久| 中文字幕免费不卡| 人人爽香蕉精品| 91九色最新地址| 亚洲另类春色校园小说| 国产精品原创巨作av| 日韩午夜精品电影| 亚洲综合一区在线| 成人黄色国产精品网站大全在线免费观看 | 欧美一激情一区二区三区| 中文字幕五月欧美| 国产成人午夜电影网| 欧美电视剧在线看免费| 亚洲国产日韩a在线播放| 91在线无精精品入口| 国产欧美精品国产国产专区| 麻豆国产欧美一区二区三区| 欧美影院精品一区| 亚洲国产欧美在线| 欧美午夜一区二区三区免费大片| 自拍偷拍亚洲激情| 在线视频国产一区| 亚洲一区欧美一区|