diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c index 1f5e6d27023..749886877c8 100644 --- a/src/bin/pg_basebackup/pg_basebackup.c +++ b/src/bin/pg_basebackup/pg_basebackup.c @@ -1262,10 +1262,11 @@ ReceiveTarFile(PGconn *conn, PGresult *res, int rownum) #ifdef HAVE_LIBZ if (state.ztarfile != NULL) { + errno = 0; /* in case gzclose() doesn't set it */ if (gzclose(state.ztarfile) != 0) { - pg_log_error("could not close compressed file \"%s\": %s", - state.filename, get_gz_error(state.ztarfile)); + pg_log_error("could not close compressed file \"%s\": %m", + state.filename); exit(1); } } diff --git a/src/bin/pg_basebackup/receivelog.c b/src/bin/pg_basebackup/receivelog.c index 646bfd1e266..223d0a05b08 100644 --- a/src/bin/pg_basebackup/receivelog.c +++ b/src/bin/pg_basebackup/receivelog.c @@ -71,7 +71,12 @@ mark_file_as_archived(StreamCtl *stream, const char *fname) return false; } - stream->walmethod->close(f, CLOSE_NORMAL); + if (stream->walmethod->close(f, CLOSE_NORMAL) != 0) + { + pg_log_error("could not close archive status file \"%s\": %s", + tmppath, stream->walmethod->getlasterror()); + return false; + } return true; } diff --git a/src/bin/pg_basebackup/walmethods.c b/src/bin/pg_basebackup/walmethods.c index 2fc6b46f59b..d1f0a8a2743 100644 --- a/src/bin/pg_basebackup/walmethods.c +++ b/src/bin/pg_basebackup/walmethods.c @@ -235,7 +235,10 @@ dir_close(Walfile f, WalCloseMethod method) #ifdef HAVE_LIBZ if (dir_data->compression > 0) + { + errno = 0; /* in case gzclose() doesn't set it */ r = gzclose(df->gzfp); + } else #endif r = close(df->fd); diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c index 10423dc726b..63df3e56e74 100644 --- a/src/bin/pg_dump/pg_backup_archiver.c +++ b/src/bin/pg_dump/pg_backup_archiver.c @@ -268,6 +268,7 @@ CloseArchive(Archive *AHX) AH->ClosePtr(AH); /* Close the output */ + errno = 0; /* in case gzclose() doesn't set it */ if (AH->gzOut) res = GZCLOSE(AH->OF); else if (AH->OF != stdout) @@ -1578,6 +1579,7 @@ RestoreOutput(ArchiveHandle *AH, OutputContext savedContext) { int res; + errno = 0; /* in case gzclose() doesn't set it */ if (AH->gzOut) res = GZCLOSE(AH->OF); else diff --git a/src/bin/pg_dump/pg_backup_directory.c b/src/bin/pg_dump/pg_backup_directory.c index 67f5df22af6..2398af265bb 100644 --- a/src/bin/pg_dump/pg_backup_directory.c +++ b/src/bin/pg_dump/pg_backup_directory.c @@ -369,7 +369,8 @@ _EndData(ArchiveHandle *AH, TocEntry *te) lclContext *ctx = (lclContext *) AH->formatData; /* Close the file */ - cfclose(ctx->dataFH); + if (cfclose(ctx->dataFH) != 0) + fatal("could not close data file: %m"); ctx->dataFH = NULL; } @@ -680,7 +681,8 @@ _EndBlob(ArchiveHandle *AH, TocEntry *te, Oid oid) int len; /* Close the BLOB data file itself */ - cfclose(ctx->dataFH); + if (cfclose(ctx->dataFH) != 0) + fatal("could not close blob data file: %m"); ctx->dataFH = NULL; /* register the blob in blobs.toc */ @@ -699,7 +701,8 @@ _EndBlobs(ArchiveHandle *AH, TocEntry *te) { lclContext *ctx = (lclContext *) AH->formatData; - cfclose(ctx->blobsTocFH); + if (cfclose(ctx->blobsTocFH) != 0) + fatal("could not close blobs TOC file: %m"); ctx->blobsTocFH = NULL; } diff --git a/src/bin/pg_dump/pg_backup_tar.c b/src/bin/pg_dump/pg_backup_tar.c index 2aee13848ee..edba568309d 100644 --- a/src/bin/pg_dump/pg_backup_tar.c +++ b/src/bin/pg_dump/pg_backup_tar.c @@ -438,8 +438,11 @@ tarClose(ArchiveHandle *AH, TAR_MEMBER *th) * Close the GZ file since we dup'd. This will flush the buffers. */ if (AH->compression != 0) + { + errno = 0; /* in case gzclose() doesn't set it */ if (GZCLOSE(th->zFH) != 0) - fatal("could not close tar member"); + fatal("could not close tar member: %m"); + } if (th->mode == 'w') _tarAddFile(AH, th); /* This will close the temp file */