diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c index 16d8929b23..fa2ce75ee3 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 44cb5b3661..682081b431 100644 --- a/src/bin/pg_basebackup/receivelog.c +++ b/src/bin/pg_basebackup/receivelog.c @@ -70,7 +70,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 8695647db4..69276ef894 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 24cc096255..87113cfd44 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) @@ -1567,6 +1568,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 8aff6bce38..4e0fb7d2d3 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 65bcb41a2f..5c351acda0 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 */