X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=complete_pread.cpp;fp=complete_pread.cpp;h=49136747b94fb680a8fe4285771f75c6a98e018a;hb=acce03bb32917e21f2d1d49c5a460d3cd2f72a11;hp=0000000000000000000000000000000000000000;hpb=2983b424187a853bcde96a8feff6ef0ae48db7d5;p=plocate diff --git a/complete_pread.cpp b/complete_pread.cpp new file mode 100644 index 0000000..4913674 --- /dev/null +++ b/complete_pread.cpp @@ -0,0 +1,21 @@ +#include +#include +#include +#include + +void complete_pread(int fd, void *ptr, size_t len, off_t offset) +{ + while (len > 0) { + ssize_t ret = pread(fd, ptr, len, offset); + if (ret == -1 && errno == EINTR) { + continue; + } + if (ret <= 0) { + perror("pread"); + exit(1); + } + ptr = reinterpret_cast(ptr) + ret; + len -= ret; + offset -= ret; + } +}