]> git.sesse.net Git - plocate/commitdiff
Move complete_pread() into a separate file, to avoid the io_uring false dependency.
authorSteinar H. Gunderson <steinar+git@gunderson.no>
Sun, 22 Nov 2020 20:28:57 +0000 (21:28 +0100)
committerSteinar H. Gunderson <steinar+git@gunderson.no>
Sun, 22 Nov 2020 20:29:24 +0000 (21:29 +0100)
complete_pread.cpp [new file with mode: 0644]
complete_pread.h [new file with mode: 0644]
io_uring_engine.cpp
io_uring_engine.h
meson.build
plocate.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;
+       }
+}
diff --git a/complete_pread.h b/complete_pread.h
new file mode 100644 (file)
index 0000000..fec5787
--- /dev/null
@@ -0,0 +1,10 @@
+#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)
index 70497a44cb122acf501d52c7062db124e6551e9d..ab9f411c7774ad7905bfbde901459540ee3c4a23 100644 (file)
@@ -7,6 +7,7 @@
 #ifndef WITHOUT_URING
 #include <liburing.h>
 #endif
+#include "complete_pread.h"
 #include "dprintf.h"
 #include "io_uring_engine.h"
 
@@ -247,20 +248,3 @@ void IOUringEngine::finish()
        }
 #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;
-       }
-}
index 258d460d1219f03807fa114cf0485924b6c0ba94..470bacf9f4c450cb49d9a25185e8100eb4b073b3 100644 (file)
@@ -83,8 +83,4 @@ private:
        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)
index f3094eafbd206918b9f5c2ca3b848faea40974e3..9dc7c1514acc323d551f7ea018aef22a58b58d26 100644 (file)
@@ -25,7 +25,7 @@ if cxx.compiles(code, name: 'function multiversioning')
        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'])
index 423aaf7e632f408bcdedcb48163c1918e7a7510b..079eb2996cf40e7d4a8c3fe5b1d37d7485e6f9a7 100644 (file)
@@ -1,4 +1,5 @@
 #include "access_rx_cache.h"
+#include "complete_pread.h"
 #include "db.h"
 #include "dprintf.h"
 #include "io_uring_engine.h"