Mercurial > hgrepos > Python > apps > py-cutils
changeset 66:c52e5f86b0ab
Handle EAGAIN and EWOULDBLOCK when reading files
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Sat, 26 Feb 2022 13:56:13 +0100 |
| parents | a0cc15de8ae9 |
| children | 19893b4f42a5 |
| files | shasum.py |
| diffstat | 1 files changed, 20 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/shasum.py Sun Feb 13 16:10:13 2022 +0100 +++ b/shasum.py Sat Feb 26 13:56:13 2022 +0100 @@ -25,6 +25,7 @@ import argparse import base64 import binascii +import errno import hashlib import io try: @@ -470,10 +471,15 @@ if mmap is None: # No mmmap available -> use traditional low-level file IO while True: - buf = os.read(fd, CHUNK_SIZE) - if len(buf) == 0: - break - h.update(buf) + try: + buf = os.read(fd, CHUNK_SIZE) + except OSError as e: + if e.errno not in (errno.EAGAIN, errno.EWOULDBLOCK): + raise + else: + if len(buf) == 0: + break + h.update(buf) else: # # Use mmap @@ -519,11 +525,16 @@ """ h = hashobj() while True: - buf = instream.read(CHUNK_SIZE) - if buf is not None: - if len(buf) == 0: - break - h.update(buf) + try: + buf = instream.read(CHUNK_SIZE) + except OSError as e: + if e.errno not in (errno.EAGAIN, errno.EWOULDBLOCK): + raise + else: + if buf is not None: + if len(buf) == 0: + break + h.update(buf) return h.digest()
