add io.ByteReader.
add testing/iotest package.
make bufio return error on short write.
R=r
DELTA=423 (208 added, 154 deleted, 61 changed)
OCL=28997
CL=28999
diff --git a/src/lib/bufio/bufio.go b/src/lib/bufio/bufio.go
index 3b4aeb8..7bfbb08 100644
--- a/src/lib/bufio/bufio.go
+++ b/src/lib/bufio/bufio.go
@@ -421,21 +421,17 @@
if b.err != nil {
return b.err
}
- n := 0;
- for n < b.n {
- m, e := b.wr.Write(b.buf[n:b.n]);
- n += m;
- if m == 0 && e == nil {
- e = io.ErrShortWrite
+ n, e := b.wr.Write(b.buf[0:b.n]);
+ if n < b.n && e == nil {
+ e = io.ErrShortWrite;
+ }
+ if e != nil {
+ if n > 0 && n < b.n {
+ copySlice(b.buf[0:b.n-n], b.buf[n:b.n])
}
- if e != nil {
- if n < b.n {
- copySlice(b.buf[0:b.n-n], b.buf[n:b.n])
- }
- b.n -= n;
- b.err = e;
- return e
- }
+ b.n -= n;
+ b.err = e;
+ return e
}
b.n = 0;
return nil
@@ -505,14 +501,14 @@
// buffered input and output
-// ReadWriter stores (a pointer to) a Reader and a Writer.
+// ReadWriter stores pointers to a Reader and a Writer.
// It implements io.ReadWriter.
type ReadWriter struct {
*Reader;
*Writer;
}
-// NewReadWriter allocates a new ReadWriter holding r and w.
+// NewReadWriter allocates a new ReadWriter that dispatches to r and w.
func NewReadWriter(r *Reader, w *Writer) *ReadWriter {
return &ReadWriter{r, w}
}