aboutsummaryrefslogtreecommitdiff
path: root/src/bin/pg_dump/pg_backup_directory.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/bin/pg_dump/pg_backup_directory.c')
-rw-r--r--src/bin/pg_dump/pg_backup_directory.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/bin/pg_dump/pg_backup_directory.c b/src/bin/pg_dump/pg_backup_directory.c
index 0ec049e6ea0..fe1f8e1e33f 100644
--- a/src/bin/pg_dump/pg_backup_directory.c
+++ b/src/bin/pg_dump/pg_backup_directory.c
@@ -351,10 +351,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;
exit_horribly(modulename, "could not write to output file: %s\n",
get_cfp_error(ctx->dataFH));
-
+ }
return;
}
@@ -491,9 +496,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;
exit_horribly(modulename, "could not write to output file: %s\n",
get_cfp_error(ctx->dataFH));
+ }
return 1;
}
@@ -521,9 +532,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;
exit_horribly(modulename, "could not write to output file: %s\n",
get_cfp_error(ctx->dataFH));
+ }
return;
}