From dfb1e9bdc0d0a506899b11038c7fce9631cac9fe Mon Sep 17 00:00:00 2001
From: Stephen Frost <sfrost@snowman.net>
Date: Sun, 9 Feb 2014 18:28:14 -0500
Subject: [PATCH] Further pg_dump / ftello improvements

Make ftello error-checking consistent to all calls and remove a
bit of ftello-related code which has been #if 0'd out since 2001.

Note that we are not concerned with the ftello() call under
snprintf() failing as it is just building a string to call
exit_horribly() with; printing -1 in such a case is fine.
---
 src/bin/pg_dump/pg_backup_archiver.c |  3 +--
 src/bin/pg_dump/pg_backup_tar.c      | 17 +++--------------
 2 files changed, 4 insertions(+), 16 deletions(-)

diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c
index 8ea40ea7b76..2b36e455335 100644
--- a/src/bin/pg_dump/pg_backup_archiver.c
+++ b/src/bin/pg_dump/pg_backup_archiver.c
@@ -3347,9 +3347,8 @@ checkSeek(FILE *fp)
 #endif
 
 	/* Check that ftello works on this file */
-	errno = 0;
 	tpos = ftello(fp);
-	if (errno)
+	if (tpos < 0)
 		return false;
 
 	/*
diff --git a/src/bin/pg_dump/pg_backup_tar.c b/src/bin/pg_dump/pg_backup_tar.c
index 06005ae8682..3bdbf868189 100644
--- a/src/bin/pg_dump/pg_backup_tar.c
+++ b/src/bin/pg_dump/pg_backup_tar.c
@@ -1068,6 +1068,9 @@ _tarAddFile(ArchiveHandle *AH, TAR_MEMBER *th)
 	 */
 	fseeko(tmp, 0, SEEK_END);
 	th->fileLen = ftello(tmp);
+	if (th->fileLen < 0)
+		exit_horribly(modulename, "could not determine seek position in file: %s\n",
+					  strerror(errno));
 	fseeko(tmp, 0, SEEK_SET);
 
 	/*
@@ -1212,20 +1215,6 @@ _tarGetHeader(ArchiveHandle *AH, TAR_MEMBER *th)
 
 	while (!gotBlock)
 	{
-#if 0
-		if (ftello(ctx->tarFH) != ctx->tarFHpos)
-		{
-			char		buf1[100],
-						buf2[100];
-
-			snprintf(buf1, sizeof(buf1), INT64_FORMAT, (int64) ftello(ctx->tarFH));
-			snprintf(buf2, sizeof(buf2), INT64_FORMAT, (int64) ftello(ctx->tarFHpos));
-			exit_horribly(modulename,
-			  "mismatch in actual vs. predicted file position (%s vs. %s)\n",
-						  buf1, buf2);
-		}
-#endif
-
 		/* Save the pos for reporting purposes */
 		hPos = ctx->tarFHpos;
 
-- 
GitLab