replay CL 19916 and CL 19913 now that the build can handle them

TBR=r
OCL=19924
CL=19934
diff --git a/src/lib/bufio.go b/src/lib/bufio.go
index f41c4cd..11813d6 100644
--- a/src/lib/bufio.go
+++ b/src/lib/bufio.go
@@ -3,8 +3,12 @@
 // license that can be found in the LICENSE file.
 
 package bufio
-import "os"
-import "io"
+
+import (
+	"os";
+	"io";
+	"utf8";
+)
 
 
 // TODO:
@@ -65,7 +69,7 @@
 	}
 
 	// Slide existing data to beginning.
-	if b.w >  b.r {
+	if b.w > b.r {
 		CopySlice(b.buf[0:b.w-b.r], b.buf[b.r:b.w]);
 		b.w -= b.r;
 	} else {
@@ -140,6 +144,30 @@
 	return nil
 }
 
+// Read a single Unicode character; returns the rune and its size.
+func (b *BufRead) ReadRune() (rune int, size int, err *os.Error) {
+	for b.r + utf8.UTFMax > b.w && !utf8.FullRune(b.buf[b.r:b.w]) {
+		n := b.w - b.r;
+		b.Fill();
+		if b.err != nil {
+			return 0, 0, b.err
+		}
+		if b.w - b.r == n {
+			// no bytes read
+			if b.r == b.w {
+				return 0, 0, EndOfFile
+			}
+			break;
+		}
+	}
+	rune, size = int(b.buf[b.r]), 1;
+	if rune >= 0x80 {
+		rune, size = utf8.DecodeRune(b.buf[b.r:b.w]);
+	}
+	b.r += size;
+	return rune, size, nil
+}
+
 // Helper function: look for byte c in array p,
 // returning its index or -1.
 func FindByte(p *[]byte, c byte) int {