diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c index dfd45aecc5..d472f4d1c2 100644 --- a/src/bin/pg_basebackup/pg_basebackup.c +++ b/src/bin/pg_basebackup/pg_basebackup.c @@ -892,8 +892,12 @@ writeTarData( #ifdef HAVE_LIBZ if (ztarfile != NULL) { + errno = 0; if (gzwrite(ztarfile, buf, r) != r) { + /* if write didn't set errno, assume problem is no disk space */ + if (errno == 0) + errno = ENOSPC; pg_log_error("could not write to compressed file \"%s\": %s", current_file, get_gz_error(ztarfile)); exit(1); @@ -902,8 +906,12 @@ writeTarData( else #endif { + errno = 0; if (fwrite(buf, r, 1, tarfile) != 1) { + /* if write didn't set errno, assume problem is no disk space */ + if (errno == 0) + errno = ENOSPC; pg_log_error("could not write to file \"%s\": %m", current_file); exit(1); } @@ -1596,8 +1604,12 @@ ReceiveAndUnpackTarFile(PGconn *conn, PGresult *res, int rownum) continue; } + errno = 0; if (fwrite(copybuf, r, 1, file) != 1) { + /* if write didn't set errno, assume problem is no disk space */ + if (errno == 0) + errno = ENOSPC; pg_log_error("could not write to file \"%s\": %m", filename); exit(1); } diff --git a/src/bin/pg_dump/pg_backup_directory.c b/src/bin/pg_dump/pg_backup_directory.c index dbe8b3836d..ffea0f7fd7 100644 --- a/src/bin/pg_dump/pg_backup_directory.c +++ b/src/bin/pg_dump/pg_backup_directory.c @@ -346,10 +346,15 @@ _WriteData(ArchiveHandle *AH, const void *data, size_t dLen) { lclContext *ctx = (lclContext *) AH->formatData; + errno = 0; if (dLen > 0 && cfwrite(data, dLen, ctx->dataFH) != dLen) + { + /* if write didn't set errno, assume problem is no disk space */ + if (errno == 0) + errno = ENOSPC; fatal("could not write to output file: %s", get_cfp_error(ctx->dataFH)); - + } return; } @@ -484,9 +489,15 @@ _WriteByte(ArchiveHandle *AH, const int i) unsigned char c = (unsigned char) i; lclContext *ctx = (lclContext *) AH->formatData; + errno = 0; if (cfwrite(&c, 1, ctx->dataFH) != 1) + { + /* if write didn't set errno, assume problem is no disk space */ + if (errno == 0) + errno = ENOSPC; fatal("could not write to output file: %s", get_cfp_error(ctx->dataFH)); + } return 1; } @@ -514,9 +525,15 @@ _WriteBuf(ArchiveHandle *AH, const void *buf, size_t len) { lclContext *ctx = (lclContext *) AH->formatData; + errno = 0; if (cfwrite(buf, len, ctx->dataFH) != len) + { + /* if write didn't set errno, assume problem is no disk space */ + if (errno == 0) + errno = ENOSPC; fatal("could not write to output file: %s", get_cfp_error(ctx->dataFH)); + } return; }