Skip to content

Commit e03485a

Browse files
committed
Fix case of pg_dump -Fc to an unseekable file (such as a pipe).
This was accidentally broken in commits cfa1b4a/5e8e794e3b. It saves a line or so to call ftello unconditionally in _CloseArchive, but we have to expect that it might fail if we're not in hasSeek mode. Per report from Bernd Helmle. In passing, improve _getFilePos to print an appropriate message if ftello fails unexpectedly, rather than just a vague complaint about "ftell mismatch".
1 parent f8db074 commit e03485a

File tree

1 file changed

+13
-9
lines changed

1 file changed

+13
-9
lines changed

src/bin/pg_dump/pg_backup_custom.c

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -707,8 +707,9 @@ _CloseArchive(ArchiveHandle *AH)
707707
if (AH->mode == archModeWrite)
708708
{
709709
WriteHead(AH);
710+
/* Remember TOC's seek position for use below */
710711
tpos = ftello(AH->FH);
711-
if (tpos < 0)
712+
if (tpos < 0 && ctx->hasSeek)
712713
exit_horribly(modulename, "could not determine seek position in archive file: %s\n",
713714
strerror(errno));
714715
WriteToc(AH);
@@ -899,17 +900,20 @@ _getFilePos(ArchiveHandle *AH, lclContext *ctx)
899900

900901
if (ctx->hasSeek)
901902
{
903+
/*
904+
* Prior to 1.7 (pg7.3) we relied on the internally maintained
905+
* pointer. Now we rely on ftello() always, unless the file has been
906+
* found to not support it. For debugging purposes, print a warning
907+
* if the internal pointer disagrees, so that we're more likely to
908+
* notice if something's broken about the internal position tracking.
909+
*/
902910
pos = ftello(AH->FH);
911+
if (pos < 0)
912+
exit_horribly(modulename, "could not determine seek position in archive file: %s\n",
913+
strerror(errno));
914+
903915
if (pos != ctx->filePos)
904-
{
905916
write_msg(modulename, "WARNING: ftell mismatch with expected position -- ftell used\n");
906-
907-
/*
908-
* Prior to 1.7 (pg7.3) we relied on the internally maintained
909-
* pointer. Now we rely on ftello() always, unless the file has
910-
* been found to not support it.
911-
*/
912-
}
913917
}
914918
else
915919
pos = ctx->filePos;

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy