git: 9front

Download patch

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\
--