| 377 | return self.fileobj is None |
| 378 | |
| 379 | def close(self): |
| 380 | fileobj = self.fileobj |
| 381 | if fileobj is None: |
| 382 | return |
| 383 | if self._buffer is None or self._buffer.closed: |
| 384 | return |
| 385 | try: |
| 386 | if self.mode == WRITE: |
| 387 | self._buffer.flush() |
| 388 | fileobj.write(self.compress.flush()) |
| 389 | write32u(fileobj, self.crc) |
| 390 | # self.size may exceed 2 GiB, or even 4 GiB |
| 391 | write32u(fileobj, self.size & 0xffffffff) |
| 392 | elif self.mode == READ: |
| 393 | self._buffer.close() |
| 394 | finally: |
| 395 | self._close() |
| 396 | |
| 397 | def _close(self): |
| 398 | self.fileobj = None |