| 434 | return True |
| 435 | |
| 436 | def seek(self, offset, whence=io.SEEK_SET): |
| 437 | if self.mode == WRITE: |
| 438 | self._check_not_closed() |
| 439 | # Flush buffer to ensure validity of self.offset |
| 440 | self._buffer.flush() |
| 441 | if whence != io.SEEK_SET: |
| 442 | if whence == io.SEEK_CUR: |
| 443 | offset = self.offset + offset |
| 444 | else: |
| 445 | raise ValueError('Seek from end not supported') |
| 446 | if offset < self.offset: |
| 447 | raise OSError('Negative seek in write mode') |
| 448 | count = offset - self.offset |
| 449 | chunk = b'\0' * self._buffer_size |
| 450 | for i in range(count // self._buffer_size): |
| 451 | self.write(chunk) |
| 452 | self.write(b'\0' * (count % self._buffer_size)) |
| 453 | elif self.mode == READ: |
| 454 | self._check_not_closed() |
| 455 | return self._buffer.seek(offset, whence) |
| 456 | |
| 457 | return self.offset |
| 458 | |
| 459 | def readline(self, size=-1): |
| 460 | self._check_not_closed() |