]> granicus.if.org Git - python/commitdiff
On behalf of Nadeem Vawda: issue #10376: micro-optimize reading from a Zipfile.
authorAntoine Pitrou <solipsis@pitrou.net>
Sat, 23 Jun 2012 14:44:48 +0000 (16:44 +0200)
committerAntoine Pitrou <solipsis@pitrou.net>
Sat, 23 Jun 2012 14:44:48 +0000 (16:44 +0200)
(patch by Serhiy)

Lib/zipfile.py

index a6c07e61c5d5fc892990e1645301696710a51c85..209dc4a0f30bf1a86d385306f38c4d0696859a23 100644 (file)
@@ -733,12 +733,13 @@ class ZipExtFile(io.BufferedIOBase):
                 buf += self._read1(self.MAX_N)
             return buf
 
-        n -= len(self._readbuffer) - self._offset
-        if n < 0:
-            buf = self._readbuffer[self._offset:n]
-            self._offset += len(buf)
+        end = n + self._offset
+        if end < len(self._readbuffer):
+            buf = self._readbuffer[self._offset:end]
+            self._offset = end
             return buf
 
+        n = end - len(self._readbuffer)
         buf = self._readbuffer[self._offset:]
         self._readbuffer = b''
         self._offset = 0
@@ -774,12 +775,13 @@ class ZipExtFile(io.BufferedIOBase):
             buf += data
             return buf
 
-        n -= len(self._readbuffer) - self._offset
-        if n < 0:
-            buf = self._readbuffer[self._offset:n]
-            self._offset += len(buf)
+        end = n + self._offset
+        if end < len(self._readbuffer):
+            buf = self._readbuffer[self._offset:end]
+            self._offset = end
             return buf
 
+        n = end - len(self._readbuffer)
         buf = self._readbuffer[self._offset:]
         self._readbuffer = b''
         self._offset = 0