⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 brdline.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include	<u.h>#include	<libc.h>#include	<bio.h>void*Brdline(Biobufhdr *bp, int delim){	char *ip, *ep;	int i, j;	i = -bp->icount;	if(i == 0) {		/*		 * eof or other error		 */		if(bp->state != Bractive) {			if(bp->state == Bracteof)				bp->state = Bractive;			bp->rdline = 0;			bp->gbuf = bp->ebuf;			return 0;		}	}	/*	 * first try in remainder of buffer (gbuf doesn't change)	 */	ip = (char*)bp->ebuf - i;	ep = memchr(ip, delim, i);	if(ep) {		j = (ep - ip) + 1;		bp->rdline = j;		bp->icount += j;		return ip;	}	/*	 * copy data to beginning of buffer	 */	if(i < bp->bsize)		memmove(bp->bbuf, ip, i);	bp->gbuf = bp->bbuf;	/*	 * append to buffer looking for the delim	 */	ip = (char*)bp->bbuf + i;	while(i < bp->bsize) {		j = read(bp->fid, ip, bp->bsize-i);		if(j <= 0) {			/*			 * end of file with no delim			 */			memmove(bp->ebuf-i, bp->bbuf, i);			bp->rdline = i;			bp->icount = -i;			bp->gbuf = bp->ebuf-i;			return 0;		}		bp->offset += j;		i += j;		ep = memchr(ip, delim, j);		if(ep) {			/*			 * found in new piece			 * copy back up and reset everything			 */			ip = (char*)bp->ebuf - i;			if(i < bp->bsize){				memmove(ip, bp->bbuf, i);				bp->gbuf = (uchar*)ip;			}			j = (ep - (char*)bp->bbuf) + 1;			bp->rdline = j;			bp->icount = j - i;			return ip;		}		ip += j;	}	/*	 * full buffer without finding	 */	bp->rdline = bp->bsize;	bp->icount = -bp->bsize;	bp->gbuf = bp->bbuf;	return 0;}intBlinelen(Biobufhdr *bp){	return bp->rdline;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -