X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=complete_pread.cpp;h=8571b33682deb85261d5bb13bfdcc91cfb41ac9f;hb=63fd24efd774f1ed3f5dab82b934f35b7b039557;hp=49136747b94fb680a8fe4285771f75c6a98e018a;hpb=acce03bb32917e21f2d1d49c5a460d3cd2f72a11;p=plocate diff --git a/complete_pread.cpp b/complete_pread.cpp index 4913674..8571b33 100644 --- a/complete_pread.cpp +++ b/complete_pread.cpp @@ -3,7 +3,7 @@ #include #include -void complete_pread(int fd, void *ptr, size_t len, off_t offset) +bool try_complete_pread(int fd, void *ptr, size_t len, off_t offset) { while (len > 0) { ssize_t ret = pread(fd, ptr, len, offset); @@ -11,11 +11,19 @@ void complete_pread(int fd, void *ptr, size_t len, off_t offset) continue; } if (ret <= 0) { - perror("pread"); - exit(1); + return false; } ptr = reinterpret_cast(ptr) + ret; len -= ret; offset -= ret; } + return true; +} + +void complete_pread(int fd, void *ptr, size_t len, off_t offset) +{ + if (!try_complete_pread(fd, ptr, len, offset)) { + perror("pread"); + exit(1); + } }