v2-0001-fix-chechSeek-for-WIN32.patch

application/octet-stream

Filename: v2-0001-fix-chechSeek-for-WIN32.patch
Type: application/octet-stream
Part: 1
Message: Re: pg_dump/pg_restore: Fix stdin/stdout handling of custom format on Win32

Patch

Format: format-patch
Series: patch v2-0001
Subject: fix chechSeek for WIN32 Fix checkSeek() detection of unseekable devices on Windows
File+
src/bin/pg_dump/pg_backup_archiver.c 10 0
From 8da89bdbdc83c7bd12d0a64661f755445d4690b3 Mon Sep 17 00:00:00 2001
From: Juan Jose Santamaria Flecha <juanjo.santamaria@gmail.com>
Date: Thu, 9 Mar 2023 17:59:05 -0500
Subject: [PATCH] fix chechSeek for WIN32 Fix checkSeek() detection of
 unseekable devices on Windows

---
 src/bin/pg_dump/pg_backup_archiver.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c
index 61ebb8f..a9958df 100644
--- a/src/bin/pg_dump/pg_backup_archiver.c
+++ b/src/bin/pg_dump/pg_backup_archiver.c
@@ -3808,6 +3808,7 @@ ReadHead(ArchiveHandle *AH)
 bool
 checkSeek(FILE *fp)
 {
+#ifndef WIN32
 	pgoff_t		tpos;
 
 	/* Check that ftello works on this file */
@@ -3822,6 +3823,15 @@ checkSeek(FILE *fp)
 	 */
 	if (fseeko(fp, tpos, SEEK_SET) != 0)
 		return false;
+#else
+	/*
+	 * Calling lseek() on a handle to a non-seeking device such as a pipe or
+	 * a communications device is not supported, even though the lseek() may
+	 * not return an error.
+	 */
+	if (GetFileType(_get_osfhandle(fileno(fp))) != FILE_TYPE_DISK)
+		return false;
+#endif
 
 	return true;
 }
-- 
2.11.0