Mercurial > hgrepos > Python > apps > py-cutils
comparison cutils/shasum.py @ 96:59253a1e6ef2
Employ .readinto() on Python 3
| author | Franz Glasner <f.glasner@feldmann-mg.com> |
|---|---|
| date | Thu, 21 Apr 2022 18:53:38 +0200 |
| parents | fc2dd6afd594 |
| children | f95918115c6b |
comparison
equal
deleted
inserted
replaced
| 95:fc2dd6afd594 | 96:59253a1e6ef2 |
|---|---|
| 598 if mmap is None or not use_mmap: | 598 if mmap is None or not use_mmap: |
| 599 # No mmap available or wanted -> use traditional low-level file IO | 599 # No mmap available or wanted -> use traditional low-level file IO |
| 600 fadvise = getattr(os, "posix_fadvise", None) | 600 fadvise = getattr(os, "posix_fadvise", None) |
| 601 if fadvise: | 601 if fadvise: |
| 602 fadvise(fd, 0, 0, os.POSIX_FADV_SEQUENTIAL) | 602 fadvise(fd, 0, 0, os.POSIX_FADV_SEQUENTIAL) |
| 603 while True: | 603 if not PY2: |
| 604 try: | 604 fileobj = io.FileIO(fd, mode="r", closefd=False) |
| 605 buf = os.read(fd, READ_CHUNK_SIZE) | 605 buf = bytearray(READ_CHUNK_SIZE) |
| 606 except OSError as e: | 606 with memoryview(buf) as full_view: |
| 607 if e.errno not in (errno.EAGAIN, errno.EWOULDBLOCK, | 607 while True: |
| 608 errno.EINTR): | 608 try: |
| 609 raise | 609 n = fileobj.readinto(buf) |
| 610 else: | 610 except OSError as e: |
| 611 if len(buf) == 0: | 611 if e.errno not in (errno.EAGAIN, |
| 612 break | 612 errno.EWOULDBLOCK, |
| 613 h.update(buf) | 613 errno.EINTR): |
| 614 raise | |
| 615 else: | |
| 616 if n == 0: | |
| 617 break | |
| 618 if n == READ_CHUNK_SIZE: | |
| 619 h.update(buf) | |
| 620 else: | |
| 621 with full_view[:n] as partial_view: | |
| 622 h.update(partial_view) | |
| 623 else: | |
| 624 while True: | |
| 625 try: | |
| 626 buf = os.read(fd, READ_CHUNK_SIZE) | |
| 627 except OSError as e: | |
| 628 if e.errno not in (errno.EAGAIN, | |
| 629 errno.EWOULDBLOCK, | |
| 630 errno.EINTR): | |
| 631 raise | |
| 632 else: | |
| 633 if len(buf) == 0: | |
| 634 break | |
| 635 h.update(buf) | |
| 614 else: | 636 else: |
| 615 # | 637 # |
| 616 # Use mmap | 638 # Use mmap |
| 617 # | 639 # |
| 618 # NOTE: On Windows mmapped files with length 0 are not supported. | 640 # NOTE: On Windows mmapped files with length 0 are not supported. |
