Charles.Forsyth20060303a828770d19 years agoHistory
52 lines · 903 B · C
RawDownload
#include	"lib9.h"#include	<bio.h> intBgetc(Biobuf *bp){	int i; loop:	i = bp->icount;	if(i != 0) {		bp->icount = i+1;		return bp->ebuf[i];	}	if(bp->state != Bractive) {		if(bp->state == Bracteof)			bp->state = Bractive;		return Beof;	}	/*	 * get next buffer, try to keep Bungetsize	 * characters pre-catenated from the previous	 * buffer to allow that many ungets.	 */	memmove(bp->bbuf-Bungetsize, bp->ebuf-Bungetsize, Bungetsize);	i = read(bp->fid, bp->bbuf, bp->bsize);	bp->gbuf = bp->bbuf;	if(i <= 0) {		if(i < 0)			bp->state = Binactive;		return Beof;	}	if(i < bp->bsize) {		memmove(bp->ebuf-i-Bungetsize, bp->bbuf-Bungetsize, i+Bungetsize);		bp->gbuf = bp->ebuf-i;	}	bp->icount = -i;	bp->offset += i;	goto loop;} intBungetc(Biobuf *bp){ 	if(bp->state == Bracteof)		bp->state = Bractive;	if(bp->state != Bractive)		return Beof;	bp->icount--;	return 1;}