added Blethal to libbio
This commit is contained in:
parent
9f31fa9d8e
commit
5851650367
|
@ -32,6 +32,7 @@ struct Biobufhdr
|
||||||
uchar* bbuf; /* pointer to beginning of buffer */
|
uchar* bbuf; /* pointer to beginning of buffer */
|
||||||
uchar* ebuf; /* pointer to end of buffer */
|
uchar* ebuf; /* pointer to end of buffer */
|
||||||
uchar* gbuf; /* pointer to good data in buf */
|
uchar* gbuf; /* pointer to good data in buf */
|
||||||
|
void (*errorf)(char *); /* called on error if not nil */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Biobuf
|
struct Biobuf
|
||||||
|
@ -70,5 +71,7 @@ int Bterm(Biobufhdr*);
|
||||||
int Bungetc(Biobufhdr*);
|
int Bungetc(Biobufhdr*);
|
||||||
int Bungetrune(Biobufhdr*);
|
int Bungetrune(Biobufhdr*);
|
||||||
long Bwrite(Biobufhdr*, void*, long);
|
long Bwrite(Biobufhdr*, void*, long);
|
||||||
|
void Blethal(Biobufhdr*, void(*)(char*));
|
||||||
|
void Berror(Biobufhdr*, char*, ...);
|
||||||
|
|
||||||
#pragma varargck argpos Bprint 2
|
#pragma varargck argpos Bprint 2
|
||||||
|
|
|
@ -199,6 +199,7 @@ outcode(void)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Binit(&b, f, OWRITE);
|
Binit(&b, f, OWRITE);
|
||||||
|
Blethal(&b, nil);
|
||||||
Bseek(&b, 0L, 2);
|
Bseek(&b, 0L, 2);
|
||||||
outhist(&b);
|
outhist(&b);
|
||||||
for(sym=0; sym<NSYM; sym++) {
|
for(sym=0; sym<NSYM; sym++) {
|
||||||
|
|
|
@ -20,6 +20,7 @@ Bflush(Biobufhdr *bp)
|
||||||
}
|
}
|
||||||
bp->state = Binactive;
|
bp->state = Binactive;
|
||||||
bp->ocount = 0;
|
bp->ocount = 0;
|
||||||
|
Berror(bp, "write error: %r");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Bracteof:
|
case Bracteof:
|
||||||
|
|
|
@ -28,8 +28,10 @@ loop:
|
||||||
bp->gbuf = bp->bbuf;
|
bp->gbuf = bp->bbuf;
|
||||||
if(i <= 0) {
|
if(i <= 0) {
|
||||||
bp->state = Bracteof;
|
bp->state = Bracteof;
|
||||||
if(i < 0)
|
if(i < 0) {
|
||||||
bp->state = Binactive;
|
bp->state = Binactive;
|
||||||
|
Berror(bp, "read error: %r");
|
||||||
|
}
|
||||||
return Beof;
|
return Beof;
|
||||||
}
|
}
|
||||||
if(i < bp->bsize) {
|
if(i < bp->bsize) {
|
||||||
|
|
|
@ -83,6 +83,7 @@ Binits(Biobufhdr *bp, int f, int mode, uchar *p, int size)
|
||||||
bp->rdline = 0;
|
bp->rdline = 0;
|
||||||
bp->offset = 0;
|
bp->offset = 0;
|
||||||
bp->runesize = 0;
|
bp->runesize = 0;
|
||||||
|
bp->errorf = nil;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,8 @@ Brdline(Biobufhdr *bp, int delim)
|
||||||
ip = (char*)bp->bbuf + i;
|
ip = (char*)bp->bbuf + i;
|
||||||
while(i < bp->bsize) {
|
while(i < bp->bsize) {
|
||||||
j = read(bp->fid, ip, bp->bsize-i);
|
j = read(bp->fid, ip, bp->bsize-i);
|
||||||
|
if(j < 0)
|
||||||
|
Berror(bp, "read error: %r");
|
||||||
if(j <= 0) {
|
if(j <= 0) {
|
||||||
/*
|
/*
|
||||||
* end of file with no delim
|
* end of file with no delim
|
||||||
|
|
|
@ -67,6 +67,8 @@ Brdstr(Biobufhdr *bp, int delim, int nulldelim)
|
||||||
ip = (char*)bp->bbuf + i;
|
ip = (char*)bp->bbuf + i;
|
||||||
while(i < bp->bsize) {
|
while(i < bp->bsize) {
|
||||||
j = read(bp->fid, ip, bp->bsize-i);
|
j = read(bp->fid, ip, bp->bsize-i);
|
||||||
|
if(j < 0)
|
||||||
|
Berror(bp, "read error: %r");
|
||||||
if(j <= 0 && i == 0)
|
if(j <= 0 && i == 0)
|
||||||
return p;
|
return p;
|
||||||
if(j <= 0 && i > 0){
|
if(j <= 0 && i > 0){
|
||||||
|
|
|
@ -23,8 +23,10 @@ Bread(Biobufhdr *bp, void *ap, long count)
|
||||||
i = read(bp->fid, bp->bbuf, bp->bsize);
|
i = read(bp->fid, bp->bbuf, bp->bsize);
|
||||||
if(i <= 0) {
|
if(i <= 0) {
|
||||||
bp->state = Bracteof;
|
bp->state = Bracteof;
|
||||||
if(i < 0)
|
if(i < 0) {
|
||||||
|
Berror(bp, "read error: %r");
|
||||||
bp->state = Binactive;
|
bp->state = Binactive;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
bp->gbuf = bp->bbuf;
|
bp->gbuf = bp->bbuf;
|
||||||
|
|
|
@ -24,8 +24,10 @@ Bwrite(Biobufhdr *bp, void *ap, long count)
|
||||||
i = write(bp->fid, bp->bbuf, bp->bsize);
|
i = write(bp->fid, bp->bbuf, bp->bsize);
|
||||||
if(i != bp->bsize) {
|
if(i != bp->bsize) {
|
||||||
errstr(errbuf, sizeof errbuf);
|
errstr(errbuf, sizeof errbuf);
|
||||||
if(strstr(errbuf, "interrupt") == nil)
|
if(strstr(errbuf, "interrupt") == nil) {
|
||||||
bp->state = Binactive;
|
bp->state = Binactive;
|
||||||
|
Berror(bp, "write error: %s", errbuf);
|
||||||
|
}
|
||||||
errstr(errbuf, sizeof errbuf);
|
errstr(errbuf, sizeof errbuf);
|
||||||
return Beof;
|
return Beof;
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@ OFILES=\
|
||||||
bgetc.$O\
|
bgetc.$O\
|
||||||
bgetd.$O\
|
bgetd.$O\
|
||||||
binit.$O\
|
binit.$O\
|
||||||
|
blethal.$O\
|
||||||
boffset.$O\
|
boffset.$O\
|
||||||
bprint.$O\
|
bprint.$O\
|
||||||
bputrune.$O\
|
bputrune.$O\
|
||||||
|
|
Loading…
Reference in a new issue