mirror of
https://github.com/postgres/postgres.git
synced 2025-04-27 22:56:53 +03:00
Provide 64-bit ftruncate() and lseek() on Windows.
Change our ftruncate() macro to use the 64-bit variant of chsize(), and add a new macro to redirect lseek() to _lseeki64(). Back-patch to all supported releases, in preparation for a bug fix. Tested-by: Davinder Singh <davinder.singh@enterprisedb.com> Discussion: https://postgr.es/m/CAKZiRmyM4YnokK6Oenw5JKwAQ3rhP0YTz2T-tiw5dAQjGRXE3Q%40mail.gmail.com
This commit is contained in:
parent
229e7793d9
commit
026762dae3
@ -306,6 +306,33 @@ extern bool rmtree(const char *path, bool rmtopdir);
|
|||||||
|
|
||||||
#if defined(WIN32) && !defined(__CYGWIN__)
|
#if defined(WIN32) && !defined(__CYGWIN__)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We want the 64-bit variant of lseek().
|
||||||
|
*
|
||||||
|
* For Visual Studio, this must be after <io.h> to avoid messing up its
|
||||||
|
* lseek() and _lseeki64() function declarations.
|
||||||
|
*
|
||||||
|
* For MinGW there is already a macro, so we have to undefine it (depending on
|
||||||
|
* _FILE_OFFSET_BITS, it may point at its own lseek64, but we don't want to
|
||||||
|
* count on that being set).
|
||||||
|
*/
|
||||||
|
#undef lseek
|
||||||
|
#define lseek(a,b,c) _lseeki64((a),(b),(c))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We want the 64-bit variant of chsize(). It sets errno and also returns it,
|
||||||
|
* so convert non-zero result to -1 to match POSIX.
|
||||||
|
*
|
||||||
|
* Prevent MinGW from declaring functions, and undefine its macro before we
|
||||||
|
* define our own.
|
||||||
|
*/
|
||||||
|
#ifndef _MSC_VER
|
||||||
|
#define FTRUNCATE_DEFINED
|
||||||
|
#include <unistd.h>
|
||||||
|
#undef ftruncate
|
||||||
|
#endif
|
||||||
|
#define ftruncate(a,b) (_chsize_s((a),(b)) == 0 ? 0 : -1)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* open() and fopen() replacements to allow deletion of open files and
|
* open() and fopen() replacements to allow deletion of open files and
|
||||||
* passing of other special options.
|
* passing of other special options.
|
||||||
|
@ -79,8 +79,6 @@
|
|||||||
/* Must be here to avoid conflicting with prototype in windows.h */
|
/* Must be here to avoid conflicting with prototype in windows.h */
|
||||||
#define mkdir(a,b) mkdir(a)
|
#define mkdir(a,b) mkdir(a)
|
||||||
|
|
||||||
#define ftruncate(a,b) chsize(a,b)
|
|
||||||
|
|
||||||
/* Windows doesn't have fsync() as such, use _commit() */
|
/* Windows doesn't have fsync() as such, use _commit() */
|
||||||
#define fsync(fd) _commit(fd)
|
#define fsync(fd) _commit(fd)
|
||||||
|
|
||||||
|
@ -103,6 +103,7 @@
|
|||||||
#undef fstat
|
#undef fstat
|
||||||
#undef kill
|
#undef kill
|
||||||
#undef listen
|
#undef listen
|
||||||
|
#undef lseek
|
||||||
#undef lstat
|
#undef lstat
|
||||||
#undef mkdir
|
#undef mkdir
|
||||||
#undef open
|
#undef open
|
||||||
|
Loading…
x
Reference in New Issue
Block a user