Read up to n bytes with at most one read() system call.
(self, n)
| 1115 | raise BadZipFile("Bad CRC-32 for file %r" % self.name) |
| 1116 | |
| 1117 | def read1(self, n): |
| 1118 | """Read up to n bytes with at most one read() system call.""" |
| 1119 | |
| 1120 | if n is None or n < 0: |
| 1121 | buf = self._readbuffer[self._offset:] |
| 1122 | self._readbuffer = b'' |
| 1123 | self._offset = 0 |
| 1124 | while not self._eof: |
| 1125 | data = self._read1(self.MAX_N) |
| 1126 | if data: |
| 1127 | buf += data |
| 1128 | break |
| 1129 | return buf |
| 1130 | |
| 1131 | end = n + self._offset |
| 1132 | if end < len(self._readbuffer): |
| 1133 | buf = self._readbuffer[self._offset:end] |
| 1134 | self._offset = end |
| 1135 | return buf |
| 1136 | |
| 1137 | n = end - len(self._readbuffer) |
| 1138 | buf = self._readbuffer[self._offset:] |
| 1139 | self._readbuffer = b'' |
| 1140 | self._offset = 0 |
| 1141 | if n > 0: |
| 1142 | while not self._eof: |
| 1143 | data = self._read1(n) |
| 1144 | if n < len(data): |
| 1145 | self._readbuffer = data |
| 1146 | self._offset = n |
| 1147 | buf += data[:n] |
| 1148 | break |
| 1149 | if data: |
| 1150 | buf += data |
| 1151 | break |
| 1152 | return buf |
| 1153 | |
| 1154 | def _read1(self, n): |
| 1155 | # Read up to n compressed bytes with at most one read() system call, |