Return the next member of the archive as a TarInfo object, when TarFile is opened for reading. Return None if there is no more available.
(self)
| 2581 | |
| 2582 | #-------------------------------------------------------------------------- |
| 2583 | def next(self): |
| 2584 | """Return the next member of the archive as a TarInfo object, when |
| 2585 | TarFile is opened for reading. Return None if there is no more |
| 2586 | available. |
| 2587 | """ |
| 2588 | self._check("ra") |
| 2589 | if self.firstmember is not None: |
| 2590 | m = self.firstmember |
| 2591 | self.firstmember = None |
| 2592 | return m |
| 2593 | |
| 2594 | # Advance the file pointer. |
| 2595 | if self.offset != self.fileobj.tell(): |
| 2596 | if self.offset == 0: |
| 2597 | return None |
| 2598 | self.fileobj.seek(self.offset - 1) |
| 2599 | if not self.fileobj.read(1): |
| 2600 | raise ReadError("unexpected end of data") |
| 2601 | |
| 2602 | # Read the next block. |
| 2603 | tarinfo = None |
| 2604 | while True: |
| 2605 | try: |
| 2606 | tarinfo = self.tarinfo.fromtarfile(self) |
| 2607 | except EOFHeaderError as e: |
| 2608 | if self.ignore_zeros: |
| 2609 | self._dbg(2, "0x%X: %s" % (self.offset, e)) |
| 2610 | self.offset += BLOCKSIZE |
| 2611 | continue |
| 2612 | except InvalidHeaderError as e: |
| 2613 | if self.ignore_zeros: |
| 2614 | self._dbg(2, "0x%X: %s" % (self.offset, e)) |
| 2615 | self.offset += BLOCKSIZE |
| 2616 | continue |
| 2617 | elif self.offset == 0: |
| 2618 | raise ReadError(str(e)) from None |
| 2619 | except EmptyHeaderError: |
| 2620 | if self.offset == 0: |
| 2621 | raise ReadError("empty file") from None |
| 2622 | except TruncatedHeaderError as e: |
| 2623 | if self.offset == 0: |
| 2624 | raise ReadError(str(e)) from None |
| 2625 | except SubsequentHeaderError as e: |
| 2626 | raise ReadError(str(e)) from None |
| 2627 | except Exception as e: |
| 2628 | try: |
| 2629 | import zlib |
| 2630 | if isinstance(e, zlib.error): |
| 2631 | raise ReadError(f'zlib error: {e}') from None |
| 2632 | else: |
| 2633 | raise e |
| 2634 | except ImportError: |
| 2635 | raise e |
| 2636 | break |
| 2637 | |
| 2638 | if tarinfo is not None: |
| 2639 | self.members.append(tarinfo) |
| 2640 | else: |