From cf112c122060568aa06efe4e6e6fb9b2dd4f1090 Mon Sep 17 00:00:00 2001 From: Thomas Munro Date: Fri, 5 Aug 2022 09:42:31 +1200 Subject: [PATCH] Remove dead pread and pwrite replacement code. pread() and pwrite() are in SUSv2, and all targeted Unix systems have them. Previously, we defined pg_pread and pg_pwrite to emulate these function with lseek() on old Unixen. The names with a pg_ prefix were a reminder of a portability hazard: they might change the current file position. That hazard is gone, so we can drop the prefixes. Since the remaining replacement code is Windows-only, move it into src/port/win32p{read,write}.c, and move the declarations into src/include/port/win32_port.h. No need for vestigial HAVE_PREAD, HAVE_PWRITE macros as they were only used for declarations in port.h which have now moved into win32_port.h. Reviewed-by: Tom Lane Reviewed-by: Greg Stark Reviewed-by: Robert Haas Reviewed-by: Andres Freund Discussion: https://postgr.es/m/CA+hUKGJ3LHeP9w5Fgzdr4G8AnEtJ=z=p6hGDEm4qYGEUX5B6fQ@mail.gmail.com --- configure | 38 +++++--------- configure.ac | 4 +- .../pg_stat_statements/pg_stat_statements.c | 4 +- src/backend/access/heap/rewriteheap.c | 2 +- src/backend/access/transam/slru.c | 4 +- src/backend/access/transam/xlog.c | 4 +- src/backend/access/transam/xlogreader.c | 2 +- src/backend/access/transam/xlogrecovery.c | 2 +- src/backend/replication/basebackup.c | 2 +- src/backend/replication/walreceiver.c | 2 +- src/backend/storage/file/fd.c | 4 +- src/backend/utils/init/miscinit.c | 2 +- src/bin/pg_test_fsync/pg_test_fsync.c | 50 +++++++++---------- src/include/access/xlogreader.h | 4 +- src/include/pg_config.h.in | 6 --- src/include/port.h | 19 ------- src/include/port/win32_port.h | 6 +++ src/port/preadv.c | 4 +- src/port/pwritev.c | 4 +- src/port/{pread.c => win32pread.c} | 22 ++------ src/port/{pwrite.c => win32pwrite.c} | 22 ++------ src/tools/msvc/Mkvcbuild.pm | 4 +- src/tools/msvc/Solution.pm | 2 - 23 files changed, 76 insertions(+), 137 deletions(-) rename src/port/{pread.c => win32pread.c} (61%) rename src/port/{pwrite.c => win32pwrite.c} (59%) diff --git a/configure b/configure index e98dfa29ce..87b3753846 100755 --- a/configure +++ b/configure @@ -16728,32 +16728,6 @@ esac fi -ac_fn_c_check_func "$LINENO" "pread" "ac_cv_func_pread" -if test "x$ac_cv_func_pread" = xyes; then : - $as_echo "#define HAVE_PREAD 1" >>confdefs.h - -else - case " $LIBOBJS " in - *" pread.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS pread.$ac_objext" - ;; -esac - -fi - -ac_fn_c_check_func "$LINENO" "pwrite" "ac_cv_func_pwrite" -if test "x$ac_cv_func_pwrite" = xyes; then : - $as_echo "#define HAVE_PWRITE 1" >>confdefs.h - -else - case " $LIBOBJS " in - *" pwrite.$ac_objext "* ) ;; - *) LIBOBJS="$LIBOBJS pwrite.$ac_objext" - ;; -esac - -fi - ac_fn_c_check_func "$LINENO" "strlcat" "ac_cv_func_strlcat" if test "x$ac_cv_func_strlcat" = xyes; then : $as_echo "#define HAVE_STRLCAT 1" >>confdefs.h @@ -17015,6 +16989,18 @@ esac ;; esac + case " $LIBOBJS " in + *" win32pread.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS win32pread.$ac_objext" + ;; +esac + + case " $LIBOBJS " in + *" win32pwrite.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS win32pwrite.$ac_objext" + ;; +esac + case " $LIBOBJS " in *" win32security.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS win32security.$ac_objext" diff --git a/configure.ac b/configure.ac index d551cb2acd..cd29d533a5 100644 --- a/configure.ac +++ b/configure.ac @@ -1876,8 +1876,6 @@ AC_REPLACE_FUNCS(m4_normalize([ getpeereid inet_aton mkdtemp - pread - pwrite strlcat strlcpy strnlen @@ -1943,6 +1941,8 @@ if test "$PORTNAME" = "win32"; then AC_LIBOBJ(win32error) AC_LIBOBJ(win32link) AC_LIBOBJ(win32ntdll) + AC_LIBOBJ(win32pread) + AC_LIBOBJ(win32pwrite) AC_LIBOBJ(win32security) AC_LIBOBJ(win32setlocale) AC_LIBOBJ(win32stat) diff --git a/contrib/pg_stat_statements/pg_stat_statements.c b/contrib/pg_stat_statements/pg_stat_statements.c index 73439c0199..ba868f0de9 100644 --- a/contrib/pg_stat_statements/pg_stat_statements.c +++ b/contrib/pg_stat_statements/pg_stat_statements.c @@ -2103,9 +2103,9 @@ qtext_store(const char *query, int query_len, if (fd < 0) goto error; - if (pg_pwrite(fd, query, query_len, off) != query_len) + if (pwrite(fd, query, query_len, off) != query_len) goto error; - if (pg_pwrite(fd, "\0", 1, off + query_len) != 1) + if (pwrite(fd, "\0", 1, off + query_len) != 1) goto error; CloseTransientFile(fd); diff --git a/src/backend/access/heap/rewriteheap.c b/src/backend/access/heap/rewriteheap.c index 197f06b5ec..9dd885d936 100644 --- a/src/backend/access/heap/rewriteheap.c +++ b/src/backend/access/heap/rewriteheap.c @@ -1149,7 +1149,7 @@ heap_xlog_logical_rewrite(XLogReaderState *r) /* write out tail end of mapping file (again) */ errno = 0; pgstat_report_wait_start(WAIT_EVENT_LOGICAL_REWRITE_MAPPING_WRITE); - if (pg_pwrite(fd, data, len, xlrec->offset) != len) + if (pwrite(fd, data, len, xlrec->offset) != len) { /* if write didn't set errno, assume problem is no disk space */ if (errno == 0) diff --git a/src/backend/access/transam/slru.c b/src/backend/access/transam/slru.c index b65cb49d7f..c9a7b97949 100644 --- a/src/backend/access/transam/slru.c +++ b/src/backend/access/transam/slru.c @@ -718,7 +718,7 @@ SlruPhysicalReadPage(SlruCtl ctl, int pageno, int slotno) errno = 0; pgstat_report_wait_start(WAIT_EVENT_SLRU_READ); - if (pg_pread(fd, shared->page_buffer[slotno], BLCKSZ, offset) != BLCKSZ) + if (pread(fd, shared->page_buffer[slotno], BLCKSZ, offset) != BLCKSZ) { pgstat_report_wait_end(); slru_errcause = SLRU_READ_FAILED; @@ -873,7 +873,7 @@ SlruPhysicalWritePage(SlruCtl ctl, int pageno, int slotno, SlruWriteAll fdata) errno = 0; pgstat_report_wait_start(WAIT_EVENT_SLRU_WRITE); - if (pg_pwrite(fd, shared->page_buffer[slotno], BLCKSZ, offset) != BLCKSZ) + if (pwrite(fd, shared->page_buffer[slotno], BLCKSZ, offset) != BLCKSZ) { pgstat_report_wait_end(); /* if write didn't set errno, assume problem is no disk space */ diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 26fbed00a4..eb5115fd5a 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -2189,7 +2189,7 @@ XLogWrite(XLogwrtRqst WriteRqst, TimeLineID tli, bool flexible) INSTR_TIME_SET_CURRENT(start); pgstat_report_wait_start(WAIT_EVENT_WAL_WRITE); - written = pg_pwrite(openLogFile, from, nleft, startoffset); + written = pwrite(openLogFile, from, nleft, startoffset); pgstat_report_wait_end(); /* @@ -3011,7 +3011,7 @@ XLogFileInitInternal(XLogSegNo logsegno, TimeLineID logtli, * enough. */ errno = 0; - if (pg_pwrite(fd, zbuffer.data, 1, wal_segment_size - 1) != 1) + if (pwrite(fd, zbuffer.data, 1, wal_segment_size - 1) != 1) { /* if write didn't set errno, assume no disk space */ save_errno = errno ? errno : ENOSPC; diff --git a/src/backend/access/transam/xlogreader.c b/src/backend/access/transam/xlogreader.c index f3dc4b7797..06e91547dd 100644 --- a/src/backend/access/transam/xlogreader.c +++ b/src/backend/access/transam/xlogreader.c @@ -1514,7 +1514,7 @@ WALRead(XLogReaderState *state, /* Reset errno first; eases reporting non-errno-affecting errors */ errno = 0; - readbytes = pg_pread(state->seg.ws_file, p, segbytes, (off_t) startoff); + readbytes = pread(state->seg.ws_file, p, segbytes, (off_t) startoff); #ifndef FRONTEND pgstat_report_wait_end(); diff --git a/src/backend/access/transam/xlogrecovery.c b/src/backend/access/transam/xlogrecovery.c index 27e02fbfcd..21088e78f6 100644 --- a/src/backend/access/transam/xlogrecovery.c +++ b/src/backend/access/transam/xlogrecovery.c @@ -3260,7 +3260,7 @@ retry: readOff = targetPageOff; pgstat_report_wait_start(WAIT_EVENT_WAL_READ); - r = pg_pread(readFile, readBuf, XLOG_BLCKSZ, (off_t) readOff); + r = pread(readFile, readBuf, XLOG_BLCKSZ, (off_t) readOff); if (r != XLOG_BLCKSZ) { char fname[MAXFNAMELEN]; diff --git a/src/backend/replication/basebackup.c b/src/backend/replication/basebackup.c index 09f071300d..5e457f9be9 100644 --- a/src/backend/replication/basebackup.c +++ b/src/backend/replication/basebackup.c @@ -1822,7 +1822,7 @@ basebackup_read_file(int fd, char *buf, size_t nbytes, off_t offset, int rc; pgstat_report_wait_start(WAIT_EVENT_BASEBACKUP_READ); - rc = pg_pread(fd, buf, nbytes, offset); + rc = pread(fd, buf, nbytes, offset); pgstat_report_wait_end(); if (rc < 0) diff --git a/src/backend/replication/walreceiver.c b/src/backend/replication/walreceiver.c index 3d37c1fe62..8604fd4bc2 100644 --- a/src/backend/replication/walreceiver.c +++ b/src/backend/replication/walreceiver.c @@ -915,7 +915,7 @@ XLogWalRcvWrite(char *buf, Size nbytes, XLogRecPtr recptr, TimeLineID tli) /* OK to write the logs */ errno = 0; - byteswritten = pg_pwrite(recvFile, buf, segbytes, (off_t) startoff); + byteswritten = pwrite(recvFile, buf, segbytes, (off_t) startoff); if (byteswritten <= 0) { char xlogfname[MAXFNAMELEN]; diff --git a/src/backend/storage/file/fd.c b/src/backend/storage/file/fd.c index 447d5a86c3..3d1a973354 100644 --- a/src/backend/storage/file/fd.c +++ b/src/backend/storage/file/fd.c @@ -2063,7 +2063,7 @@ FileRead(File file, char *buffer, int amount, off_t offset, retry: pgstat_report_wait_start(wait_event_info); - returnCode = pg_pread(vfdP->fd, buffer, amount, offset); + returnCode = pread(vfdP->fd, buffer, amount, offset); pgstat_report_wait_end(); if (returnCode < 0) @@ -2145,7 +2145,7 @@ FileWrite(File file, char *buffer, int amount, off_t offset, retry: errno = 0; pgstat_report_wait_start(wait_event_info); - returnCode = pg_pwrite(VfdCache[file].fd, buffer, amount, offset); + returnCode = pwrite(VfdCache[file].fd, buffer, amount, offset); pgstat_report_wait_end(); /* if write didn't set errno, assume problem is no disk space */ diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c index eb43b2c5e5..bd973ba613 100644 --- a/src/backend/utils/init/miscinit.c +++ b/src/backend/utils/init/miscinit.c @@ -1429,7 +1429,7 @@ AddToDataDirLockFile(int target_line, const char *str) len = strlen(destbuffer); errno = 0; pgstat_report_wait_start(WAIT_EVENT_LOCK_FILE_ADDTODATADIR_WRITE); - if (pg_pwrite(fd, destbuffer, len, 0) != len) + if (pwrite(fd, destbuffer, len, 0) != len) { pgstat_report_wait_end(); /* if write didn't set errno, assume problem is no disk space */ diff --git a/src/bin/pg_test_fsync/pg_test_fsync.c b/src/bin/pg_test_fsync/pg_test_fsync.c index 6739214eb8..8f0ef8e66b 100644 --- a/src/bin/pg_test_fsync/pg_test_fsync.c +++ b/src/bin/pg_test_fsync/pg_test_fsync.c @@ -312,10 +312,10 @@ test_sync(int writes_per_op) for (ops = 0; alarm_triggered == false; ops++) { for (writes = 0; writes < writes_per_op; writes++) - if (pg_pwrite(tmpfile, - buf, - XLOG_BLCKSZ, - writes * XLOG_BLCKSZ) != XLOG_BLCKSZ) + if (pwrite(tmpfile, + buf, + XLOG_BLCKSZ, + writes * XLOG_BLCKSZ) != XLOG_BLCKSZ) die("write failed"); } STOP_TIMER; @@ -338,10 +338,10 @@ test_sync(int writes_per_op) for (ops = 0; alarm_triggered == false; ops++) { for (writes = 0; writes < writes_per_op; writes++) - if (pg_pwrite(tmpfile, - buf, - XLOG_BLCKSZ, - writes * XLOG_BLCKSZ) != XLOG_BLCKSZ) + if (pwrite(tmpfile, + buf, + XLOG_BLCKSZ, + writes * XLOG_BLCKSZ) != XLOG_BLCKSZ) die("write failed"); fdatasync(tmpfile); } @@ -363,10 +363,10 @@ test_sync(int writes_per_op) for (ops = 0; alarm_triggered == false; ops++) { for (writes = 0; writes < writes_per_op; writes++) - if (pg_pwrite(tmpfile, - buf, - XLOG_BLCKSZ, - writes * XLOG_BLCKSZ) != XLOG_BLCKSZ) + if (pwrite(tmpfile, + buf, + XLOG_BLCKSZ, + writes * XLOG_BLCKSZ) != XLOG_BLCKSZ) die("write failed"); if (fsync(tmpfile) != 0) die("fsync failed"); @@ -387,10 +387,10 @@ test_sync(int writes_per_op) for (ops = 0; alarm_triggered == false; ops++) { for (writes = 0; writes < writes_per_op; writes++) - if (pg_pwrite(tmpfile, - buf, - XLOG_BLCKSZ, - writes * XLOG_BLCKSZ) != XLOG_BLCKSZ) + if (pwrite(tmpfile, + buf, + XLOG_BLCKSZ, + writes * XLOG_BLCKSZ) != XLOG_BLCKSZ) die("write failed"); if (pg_fsync_writethrough(tmpfile) != 0) die("fsync failed"); @@ -419,10 +419,10 @@ test_sync(int writes_per_op) for (ops = 0; alarm_triggered == false; ops++) { for (writes = 0; writes < writes_per_op; writes++) - if (pg_pwrite(tmpfile, - buf, - XLOG_BLCKSZ, - writes * XLOG_BLCKSZ) != XLOG_BLCKSZ) + if (pwrite(tmpfile, + buf, + XLOG_BLCKSZ, + writes * XLOG_BLCKSZ) != XLOG_BLCKSZ) /* * This can generate write failures if the filesystem has @@ -484,10 +484,10 @@ test_open_sync(const char *msg, int writes_size) for (ops = 0; alarm_triggered == false; ops++) { for (writes = 0; writes < 16 / writes_size; writes++) - if (pg_pwrite(tmpfile, - buf, - writes_size * 1024, - writes * writes_size * 1024) != + if (pwrite(tmpfile, + buf, + writes_size * 1024, + writes * writes_size * 1024) != writes_size * 1024) die("write failed"); } @@ -586,7 +586,7 @@ test_non_sync(void) START_TIMER; for (ops = 0; alarm_triggered == false; ops++) { - if (pg_pwrite(tmpfile, buf, XLOG_BLCKSZ, 0) != XLOG_BLCKSZ) + if (pwrite(tmpfile, buf, XLOG_BLCKSZ, 0) != XLOG_BLCKSZ) die("write failed"); } STOP_TIMER; diff --git a/src/include/access/xlogreader.h b/src/include/access/xlogreader.h index 5395f155aa..87ff00feb7 100644 --- a/src/include/access/xlogreader.h +++ b/src/include/access/xlogreader.h @@ -375,11 +375,11 @@ extern bool XLogReaderValidatePageHeader(XLogReaderState *state, /* * Error information from WALRead that both backend and frontend caller can - * process. Currently only errors from pg_pread can be reported. + * process. Currently only errors from pread can be reported. */ typedef struct WALReadError { - int wre_errno; /* errno set by the last pg_pread() */ + int wre_errno; /* errno set by the last pread() */ int wre_off; /* Offset we tried to read from. */ int wre_req; /* Bytes requested to be read. */ int wre_read; /* Bytes read by the last read(). */ diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in index b6ee575681..4d61ecd914 100644 --- a/src/include/pg_config.h.in +++ b/src/include/pg_config.h.in @@ -388,9 +388,6 @@ /* Define to 1 if you have the `ppoll' function. */ #undef HAVE_PPOLL -/* Define to 1 if you have the `pread' function. */ -#undef HAVE_PREAD - /* Define to 1 if the PS_STRINGS thing exists. */ #undef HAVE_PS_STRINGS @@ -406,9 +403,6 @@ /* Have PTHREAD_PRIO_INHERIT. */ #undef HAVE_PTHREAD_PRIO_INHERIT -/* Define to 1 if you have the `pwrite' function. */ -#undef HAVE_PWRITE - /* Define to 1 if you have the header file. */ #undef HAVE_READLINE_H diff --git a/src/include/port.h b/src/include/port.h index 85c9b38f4e..14b640fe33 100644 --- a/src/include/port.h +++ b/src/include/port.h @@ -417,25 +417,6 @@ extern char *mkdtemp(char *path); 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 - -/* For pg_pwritev() and pg_preadv(), see port/pg_iovec.h. */ - #if !HAVE_DECL_STRLCAT extern size_t strlcat(char *dst, const char *src, size_t siz); #endif diff --git a/src/include/port/win32_port.h b/src/include/port/win32_port.h index a48eed53eb..336e11b3ba 100644 --- a/src/include/port/win32_port.h +++ b/src/include/port/win32_port.h @@ -562,4 +562,10 @@ typedef unsigned short mode_t; #define HAVE_BUGGY_STRTOF 1 #endif +/* in port/win32pread.c */ +extern ssize_t pread(int fd, void *buf, size_t nbyte, off_t offset); + +/* in port/win32pwrite.c */ +extern ssize_t pwrite(int fd, const void *buf, size_t nbyte, off_t offset); + #endif /* PG_WIN32_PORT_H */ diff --git a/src/port/preadv.c b/src/port/preadv.c index d12e5a122b..aa7537503f 100644 --- a/src/port/preadv.c +++ b/src/port/preadv.c @@ -30,7 +30,7 @@ pg_preadv(int fd, const struct iovec *iov, int iovcnt, off_t offset) { #ifdef HAVE_READV if (iovcnt == 1) - return pg_pread(fd, iov[0].iov_base, iov[0].iov_len, offset); + return pread(fd, iov[0].iov_base, iov[0].iov_len, offset); if (lseek(fd, offset, SEEK_SET) < 0) return -1; return readv(fd, iov, iovcnt); @@ -40,7 +40,7 @@ pg_preadv(int fd, const struct iovec *iov, int iovcnt, off_t offset) for (int i = 0; i < iovcnt; ++i) { - part = pg_pread(fd, iov[i].iov_base, iov[i].iov_len, offset); + part = pread(fd, iov[i].iov_base, iov[i].iov_len, offset); if (part < 0) { if (i == 0) diff --git a/src/port/pwritev.c b/src/port/pwritev.c index 0bdd69fffc..cb7421381e 100644 --- a/src/port/pwritev.c +++ b/src/port/pwritev.c @@ -30,7 +30,7 @@ pg_pwritev(int fd, const struct iovec *iov, int iovcnt, off_t offset) { #ifdef HAVE_WRITEV if (iovcnt == 1) - return pg_pwrite(fd, iov[0].iov_base, iov[0].iov_len, offset); + return pwrite(fd, iov[0].iov_base, iov[0].iov_len, offset); if (lseek(fd, offset, SEEK_SET) < 0) return -1; return writev(fd, iov, iovcnt); @@ -40,7 +40,7 @@ pg_pwritev(int fd, const struct iovec *iov, int iovcnt, off_t offset) for (int i = 0; i < iovcnt; ++i) { - part = pg_pwrite(fd, iov[i].iov_base, iov[i].iov_len, offset); + part = pwrite(fd, iov[i].iov_base, iov[i].iov_len, offset); if (part < 0) { if (i == 0) diff --git a/src/port/pread.c b/src/port/win32pread.c similarity index 61% rename from src/port/pread.c rename to src/port/win32pread.c index 491605926f..7058c3460b 100644 --- a/src/port/pread.c +++ b/src/port/win32pread.c @@ -1,15 +1,12 @@ /*------------------------------------------------------------------------- * - * pread.c - * Implementation of pread(2) for platforms that lack one. + * win32pread.c + * Implementation of pread(2) for Windows. * * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group * * IDENTIFICATION - * src/port/pread.c - * - * Note that this implementation changes the current file position, unlike - * the POSIX function, so we use the name pg_pread(). + * src/port/win32pread.c * *------------------------------------------------------------------------- */ @@ -17,16 +14,11 @@ #include "postgres.h" -#ifdef WIN32 #include -#else -#include -#endif ssize_t -pg_pread(int fd, void *buf, size_t size, off_t offset) +pread(int fd, void *buf, size_t size, off_t offset) { -#ifdef WIN32 OVERLAPPED overlapped = {0}; HANDLE handle; DWORD result; @@ -49,10 +41,4 @@ pg_pread(int fd, void *buf, size_t size, off_t offset) } return result; -#else - if (lseek(fd, offset, SEEK_SET) < 0) - return -1; - - return read(fd, buf, size); -#endif } diff --git a/src/port/pwrite.c b/src/port/win32pwrite.c similarity index 59% rename from src/port/pwrite.c rename to src/port/win32pwrite.c index eeaffacc48..455cec4a74 100644 --- a/src/port/pwrite.c +++ b/src/port/win32pwrite.c @@ -1,15 +1,12 @@ /*------------------------------------------------------------------------- * - * pwrite.c - * Implementation of pwrite(2) for platforms that lack one. + * win32pwrite.c + * Implementation of pwrite(2) for Windows. * * Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group * * IDENTIFICATION - * src/port/pwrite.c - * - * Note that this implementation changes the current file position, unlike - * the POSIX function, so we use the name pg_pwrite(). + * src/port/win32pwrite.c * *------------------------------------------------------------------------- */ @@ -17,16 +14,11 @@ #include "postgres.h" -#ifdef WIN32 #include -#else -#include -#endif ssize_t -pg_pwrite(int fd, const void *buf, size_t size, off_t offset) +pwrite(int fd, const void *buf, size_t size, off_t offset) { -#ifdef WIN32 OVERLAPPED overlapped = {0}; HANDLE handle; DWORD result; @@ -46,10 +38,4 @@ pg_pwrite(int fd, const void *buf, size_t size, off_t offset) } return result; -#else - if (lseek(fd, offset, SEEK_SET) < 0) - return -1; - - return write(fd, buf, size); -#endif } diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm index 1ffe6e66d5..a06dbcae4d 100644 --- a/src/tools/msvc/Mkvcbuild.pm +++ b/src/tools/msvc/Mkvcbuild.pm @@ -104,13 +104,15 @@ sub mkvcbuild getaddrinfo.c gettimeofday.c inet_net_ntop.c kill.c open.c snprintf.c strlcat.c strlcpy.c dirmod.c noblock.c path.c dirent.c getopt.c getopt_long.c - pread.c preadv.c pwrite.c pwritev.c pg_bitutils.c + preadv.c pwritev.c pg_bitutils.c pg_strong_random.c pgcheckdir.c pgmkdirp.c pgsleep.c pgstrcasecmp.c pqsignal.c mkdtemp.c qsort.c qsort_arg.c bsearch_arg.c quotes.c system.c strerror.c tar.c win32dlopen.c win32env.c win32error.c win32link.c + win32pread.c + win32pwrite.c win32ntdll.c win32security.c win32setlocale.c win32stat.c); diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm index 5301e01e83..5a461a5212 100644 --- a/src/tools/msvc/Solution.pm +++ b/src/tools/msvc/Solution.pm @@ -324,13 +324,11 @@ sub GenerateFiles HAVE_POSIX_FALLOCATE => undef, HAVE_PPC_LWARX_MUTEX_HINT => undef, HAVE_PPOLL => undef, - HAVE_PREAD => undef, HAVE_PS_STRINGS => undef, HAVE_PTHREAD => undef, HAVE_PTHREAD_BARRIER_WAIT => undef, HAVE_PTHREAD_IS_THREADED_NP => undef, HAVE_PTHREAD_PRIO_INHERIT => undef, - HAVE_PWRITE => undef, HAVE_READLINE_H => undef, HAVE_READLINE_HISTORY_H => undef, HAVE_READLINE_READLINE_H => undef,