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/io/io.go b/src/lib/io/io.go
index 70c82d5..91b6ffd 100644
--- a/src/lib/io/io.go
+++ b/src/lib/io/io.go
@@ -185,3 +185,29 @@
}
return written, err
}
+
+// A ByteReader satisfies Reads by consuming data from a slice of bytes.
+// Clients can call NewByteReader to create one or wrap pointers
+// to their own slices: r := ByteReader{&data}.
+type ByteReader struct {
+ Data *[]byte
+}
+
+func (r ByteReader) Read(p []byte) (int, os.Error) {
+ n := len(p);
+ b := r.Data;
+ if n > len(b) {
+ n = len(b);
+ }
+ for i := 0; i < n; i++ {
+ p[i] = b[i];
+ }
+ *b = b[n:len(b)];
+ return n, nil;
+}
+
+// NewByteReader returns a new ByteReader reading from data.
+func NewByteReader(data []byte) ByteReader {
+ return ByteReader{ &data };
+}
+