--- /dev/null
+#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;
+ }
+}
--- /dev/null
+#ifndef COMPLETE_PREAD_H
+#define COMPLETE_PREAD_H 1
+
+#include <unistd.h>
+
+// A wrapper around pread() that returns an incomplete read.
+// Always synchronous (no io_uring).
+void complete_pread(int fd, void *ptr, size_t len, off_t offset);
+
+#endif // !defined(COMPLETE_PREAD_H)
#ifndef WITHOUT_URING
#include <liburing.h>
#endif
+#include "complete_pread.h"
#include "dprintf.h"
#include "io_uring_engine.h"
}
#endif
}
-
-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;
- }
-}
static constexpr size_t queue_depth = 256;
};
-// A wrapper around pread() that returns an incomplete read.
-// Always synchronous (no io_uring).
-void complete_pread(int fd, void *ptr, size_t len, off_t offset);
-
#endif // !defined(IO_URING_ENGINE_H)
add_project_arguments('-DHAS_FUNCTION_MULTIVERSIONING', language: 'cpp')
endif
-executable('plocate', ['plocate.cpp', 'io_uring_engine.cpp', 'turbopfor.cpp', 'parse_trigrams.cpp', 'serializer.cpp', 'access_rx_cache.cpp', 'needle.cpp'],
+executable('plocate', ['plocate.cpp', 'io_uring_engine.cpp', 'turbopfor.cpp', 'parse_trigrams.cpp', 'serializer.cpp', 'access_rx_cache.cpp', 'needle.cpp', 'complete_pread.cpp'],
dependencies: [uringdep, zstddep, threaddep, atomicdep],
install: true,
install_mode: ['rwxr-sr-x', 'root', 'mlocate'])
#include "access_rx_cache.h"
+#include "complete_pread.h"
#include "db.h"
#include "dprintf.h"
#include "io_uring_engine.h"