Make sure that writing an array instance returns the number of bytes,
not the number of array elements.
diff --git a/Lib/io.py b/Lib/io.py
index ccdb3fb..4465e9e 100644
--- a/Lib/io.py
+++ b/Lib/io.py
@@ -17,6 +17,7 @@
 XXX don't use assert to validate input requirements
 XXX whenever an argument is None, use the default value
 XXX read/write ops should check readable/writable
+XXX buffered readinto should work with arbitrary buffer objects
 """
 
 __author__ = ("Guido van Rossum <guido@python.org>, "
@@ -205,6 +206,7 @@
 
         This is a no-op for read-only and non-blocking streams.
         """
+        # XXX Should this return the number of bytes written???
 
     __closed = False
 
@@ -431,6 +433,7 @@
         Raises BlockingIOError if the underlying raw stream has no
         data at the moment.
         """
+        # XXX This ought to work with anything that supports the buffer API
         data = self.read(len(b))
         n = len(data)
         b[:n] = data
@@ -676,7 +679,9 @@
                 # We can't accept anything else.
                 # XXX Why not just let the exception pass through?
                 raise BlockingIOError(e.errno, e.strerror, 0)
+        before = len(self._write_buf)
         self._write_buf.extend(b)
+        written = len(self._write_buf) - before
         if len(self._write_buf) > self.buffer_size:
             try:
                 self.flush()
@@ -687,7 +692,7 @@
                     overage = len(self._write_buf) - self.max_buffer_size
                     self._write_buf = self._write_buf[:self.max_buffer_size]
                     raise BlockingIOError(e.errno, e.strerror, overage)
-        return len(b)
+        return written
 
     def flush(self):
         written = 0