From: Guido van Rossum Date: Wed, 7 Mar 2007 05:23:25 +0000 (+0000) Subject: Change the specs for readinto() -- it should *not* shorten the buffer to X-Git-Tag: v3.0a1~1131 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=00efeadbcf2bfdeb805eecbb6d486b0bf93c3738;p=python Change the specs for readinto() -- it should *not* shorten the buffer to the amount of data read. --- diff --git a/Lib/io.py b/Lib/io.py index d6ee186b97..db0ba7e87d 100644 --- a/Lib/io.py +++ b/Lib/io.py @@ -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)