mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +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:
		@@ -297,6 +297,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.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -70,8 +70,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)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -109,6 +109,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
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user