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.