ref: d0c35bf9536e11d56be4574dd58d63d606cbf9e9
parent: 8d1de5ee0945bd83429d1341df535a102e4c6366
author: aiju <aiju@phicode.de>
date: Tue Jul 12 14:39:40 EDT 2011
added Blethal to libbio
--- a/sys/include/bio.h
+++ b/sys/include/bio.h
@@ -32,6 +32,7 @@
uchar* bbuf; /* pointer to beginning of buffer */
uchar* ebuf; /* pointer to end of buffer */
uchar* gbuf; /* pointer to good data in buf */
+ void (*errorf)(char *); /* called on error if not nil */
};
struct Biobuf
@@ -70,5 +71,7 @@
int Bungetc(Biobufhdr*);
int Bungetrune(Biobufhdr*);
long Bwrite(Biobufhdr*, void*, long);
+void Blethal(Biobufhdr*, void(*)(char*));
+void Berror(Biobufhdr*, char*, ...);
#pragma varargck argpos Bprint 2
--- a/sys/src/cmd/8c/swt.c
+++ b/sys/src/cmd/8c/swt.c
@@ -199,6 +199,7 @@
return;
}
Binit(&b, f, OWRITE);
+ Blethal(&b, nil);
Bseek(&b, 0L, 2);
outhist(&b);
for(sym=0; sym<NSYM; sym++) {--- a/sys/src/libbio/bflush.c
+++ b/sys/src/libbio/bflush.c
@@ -20,6 +20,7 @@
}
bp->state = Binactive;
bp->ocount = 0;
+ Berror(bp, "write error: %r");
break;
case Bracteof:
--- a/sys/src/libbio/bgetc.c
+++ b/sys/src/libbio/bgetc.c
@@ -28,8 +28,10 @@
bp->gbuf = bp->bbuf;
if(i <= 0) {bp->state = Bracteof;
- if(i < 0)
+ if(i < 0) {bp->state = Binactive;
+ Berror(bp, "read error: %r");
+ }
return Beof;
}
if(i < bp->bsize) {--- a/sys/src/libbio/binit.c
+++ b/sys/src/libbio/binit.c
@@ -83,6 +83,7 @@
bp->rdline = 0;
bp->offset = 0;
bp->runesize = 0;
+ bp->errorf = nil;
return 0;
}
--- a/sys/src/libbio/brdline.c
+++ b/sys/src/libbio/brdline.c
@@ -47,6 +47,8 @@
ip = (char*)bp->bbuf + i;
while(i < bp->bsize) {j = read(bp->fid, ip, bp->bsize-i);
+ if(j < 0)
+ Berror(bp, "read error: %r");
if(j <= 0) {/*
* end of file with no delim
--- a/sys/src/libbio/brdstr.c
+++ b/sys/src/libbio/brdstr.c
@@ -67,6 +67,8 @@
ip = (char*)bp->bbuf + i;
while(i < bp->bsize) {j = read(bp->fid, ip, bp->bsize-i);
+ if(j < 0)
+ Berror(bp, "read error: %r");
if(j <= 0 && i == 0)
return p;
if(j <= 0 && i > 0){--- a/sys/src/libbio/bread.c
+++ b/sys/src/libbio/bread.c
@@ -23,8 +23,10 @@
i = read(bp->fid, bp->bbuf, bp->bsize);
if(i <= 0) {bp->state = Bracteof;
- if(i < 0)
+ if(i < 0) {+ Berror(bp, "read error: %r");
bp->state = Binactive;
+ }
break;
}
bp->gbuf = bp->bbuf;
--- a/sys/src/libbio/bwrite.c
+++ b/sys/src/libbio/bwrite.c
@@ -24,8 +24,10 @@
i = write(bp->fid, bp->bbuf, bp->bsize);
if(i != bp->bsize) {errstr(errbuf, sizeof errbuf);
- if(strstr(errbuf, "interrupt") == nil)
+ if(strstr(errbuf, "interrupt") == nil) {bp->state = Binactive;
+ Berror(bp, "write error: %s", errbuf);
+ }
errstr(errbuf, sizeof errbuf);
return Beof;
}
--- a/sys/src/libbio/mkfile
+++ b/sys/src/libbio/mkfile
@@ -9,6 +9,7 @@
bgetc.$O\
bgetd.$O\
binit.$O\
+ blethal.$O\
boffset.$O\
bprint.$O\
bputrune.$O\
--
⑨