diff options
-rw-r--r-- | Lib/io.py | 14 | ||||
-rw-r--r-- | Lib/test/test_io.py | 9 |
2 files changed, 16 insertions, 7 deletions
@@ -132,7 +132,8 @@ class RawIOBase: set not to block and has no data to read. """ b = bytes(n.__index__()) - self.readinto(b) + n = self.readinto(b) + del b[n:] return b def readinto(self, b): @@ -200,8 +201,10 @@ class FileIO(RawIOBase): def readinto(self, b): # XXX We really should have os.readinto() - b[:] = os.read(self._fd, len(b)) - return len(b) + tmp = os.read(self._fd, len(b)) + n = len(tmp) + b[:n] = tmp + return n def write(self, b): return os.write(self._fd, b) @@ -303,7 +306,10 @@ class BytesIO(BufferedIOBase): return b def readinto(self, b): - b[:] = self.read(len(b)) + tmp = self.read(len(b)) + n = len(tmp) + b[:n] = tmp + return n def write(self, b): n = len(b) diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py index 1be1b714e5..03cdfef322 100644 --- a/Lib/test/test_io.py +++ b/Lib/test/test_io.py @@ -70,10 +70,13 @@ class IOTest(unittest.TestCase): def read_ops(self, f): data = f.read(5) self.assertEqual(data, b"hello") - f.readinto(data) + n = f.readinto(data) + self.assertEqual(n, 5) self.assertEqual(data, b" worl") - f.readinto(data) - self.assertEqual(data, b"d\n") + n = f.readinto(data) + self.assertEqual(n, 2) + self.assertEqual(len(data), 5) + self.assertEqual(data[:2], b"d\n") f.seek(0) self.assertEqual(f.read(20), b"hello world\n") f.seek(-6, 2) |