postgresql/src/include/port
Michael Paquier a923e21631 Fix detection of unseekable files for fseek() and ftello() with MSVC
Calling fseek() or ftello() on a handle to a non-seeking device such as
a pipe or a communications device is not supported.  Unfortunately,
MSVC's flavor of these routines, _fseeki64() and _ftelli64(), do not
return an error when given a pipe as handle.  Some of the logic of
pg_dump and restore relies on these routines to check if a handle is
seekable, causing failures when passing the contents of pg_dump to
pg_restore through a pipe, for example.

This commit introduces wrappers for fseeko() and ftello() on MSVC so as
any callers are able to properly detect the cases of non-seekable
handles.  This relies mainly on GetFileType(), sharing a bit of code
with the MSVC port for fstat().  The code in charge of getting a file
type is refactored into a new file called win32common.c, shared by
win32stat.c and the new win32fseek.c.  It includes the MSVC ports for
fseeko() and ftello().

Like 765f5df, this is backpatched down to 14, where the fstat()
implementation for MSVC is able to understand about files larger than
4GB in size.  Using a TAP test for that is proving to be tricky as
IPC::Run handles the pipes by itself, still I have been able to check
the fix manually.

Reported-by: Daniel Watzinger
Author: Juan José Santamaría Flecha, Michael Paquier
Discussion: https://postgr.es/m/CAC+AXB26a4EmxM2suXxPpJaGrqAdxracd7hskLg-zxtPB50h7A@mail.gmail.com
Backpatch-through: 14
2023-04-12 09:09:38 +09:00
..
atomics Update copyright for 2023 2023-01-02 15:00:37 -05:00
win32 Remove configure probe for netinet/tcp.h. 2022-08-18 16:31:11 +12:00
win32_msvc windows: msvc: Define STDIN/OUT/ERR_FILENO. 2022-07-18 17:21:54 -07:00
aix.h Attempt to work around a 32bit xlc compiler bug from a different place. 2015-08-08 01:19:02 +02:00
atomics.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
cygwin.h Simplify declaring variables exported from libpgcommon and libpgport. 2021-11-29 11:00:00 -05:00
darwin.h Refer to OS X as "macOS", except for the port name which is still "darwin". 2016-09-25 15:40:57 -04:00
freebsd.h Remove configure probe for fdatasync. 2022-08-05 16:37:38 +12:00
linux.h pgindent run for 9.4 2014-05-06 12:12:18 -04:00
netbsd.h Remove cvs keywords from all files. 2010-09-20 22:08:53 +02:00
openbsd.h Remove cvs keywords from all files. 2010-09-20 22:08:53 +02:00
pg_bitutils.h Remove newly added asserts from pg_bitutils.h 2023-02-22 17:22:43 +07:00
pg_bswap.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
pg_crc32c.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
pg_iovec.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
pg_lfind.h Update copyright for 2023 2023-01-02 15:00:37 -05:00
pg_pthread.h Add missing pthread_barrier_t. 2021-03-10 17:44:04 +13:00
simd.h Fix various typos in code and tests 2023-02-09 14:43:53 +09:00
solaris.h Remove obsolete HAVE_BUGGY_SOLARIS_STRTOD 2020-08-15 11:27:41 +02:00
win32.h mingw: Define PGDLLEXPORT as __declspec (dllexport) as done for msvc 2022-09-30 10:50:05 -07:00
win32_port.h Fix detection of unseekable files for fseek() and ftello() with MSVC 2023-04-12 09:09:38 +09:00
win32ntdll.h Update copyright for 2023 2023-01-02 15:00:37 -05:00