aboutsummaryrefslogtreecommitdiff
path: root/src/include/port.h
diff options
context:
space:
mode:
authorThomas Munro <tmunro@postgresql.org>2018-11-07 09:50:01 +1300
committerThomas Munro <tmunro@postgresql.org>2018-11-07 09:50:01 +1300
commit3fd2a7932ef0708dda57369bb20c0499d905cc82 (patch)
treee88ac8da2265607cfdc4fc3fbae46b2a96f3010a /src/include/port.h
parentb43df566b372650a9b9e2a0dd9e695c1f16da14f (diff)
downloadpostgresql-3fd2a7932ef0708dda57369bb20c0499d905cc82.tar.gz
postgresql-3fd2a7932ef0708dda57369bb20c0499d905cc82.zip
Provide pg_pread() and pg_pwrite() for random I/O.
Forward to POSIX pread() and pwrite(), or emulate them if unavailable. The emulation is not perfect as the file position is changed, so we'll put pg_ prefixes on the names to minimize the risk of confusion in future patches that might inadvertently try to mix pread() and read() on the same file descriptor. Author: Thomas Munro Reviewed-by: Tom Lane, Jesper Pedersen Discussion: https://postgr.es/m/CAEepm=02rapCpPR3ZGF2vW=SBHSdFYO_bz_f-wwWJonmA3APgw@mail.gmail.com
Diffstat (limited to 'src/include/port.h')
-rw-r--r--src/include/port.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/include/port.h b/src/include/port.h
index 3a53bcf2e4b..81583d557cd 100644
--- a/src/include/port.h
+++ b/src/include/port.h
@@ -392,6 +392,23 @@ extern double rint(double x);
extern int inet_aton(const char *cp, struct in_addr *addr);
#endif
+/*
+ * Windows and older Unix don't have pread(2) and pwrite(2). We have
+ * replacement functions, but they have slightly different semantics so we'll
+ * use a name with a pg_ prefix to avoid confusion.
+ */
+#ifdef HAVE_PREAD
+#define pg_pread pread
+#else
+extern ssize_t pg_pread(int fd, void *buf, size_t nbyte, off_t offset);
+#endif
+
+#ifdef HAVE_PWRITE
+#define pg_pwrite pwrite
+#else
+extern ssize_t pg_pwrite(int fd, const void *buf, size_t nbyte, off_t offset);
+#endif
+
#if !HAVE_DECL_STRLCAT
extern size_t strlcat(char *dst, const char *src, size_t siz);
#endif