]> git.sesse.net Git - plocate/blobdiff - complete_pread.cpp
Move complete_pread() into a separate file, to avoid the io_uring false dependency.
[plocate] / complete_pread.cpp
diff --git a/complete_pread.cpp b/complete_pread.cpp
new file mode 100644 (file)
index 0000000..4913674
--- /dev/null
@@ -0,0 +1,21 @@
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+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<char *>(ptr) + ret;
+               len -= ret;
+               offset -= ret;
+       }
+}