diff options
Diffstat (limited to 'src/bin/pg_dump/pg_backup_directory.c')
-rw-r--r-- | src/bin/pg_dump/pg_backup_directory.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/bin/pg_dump/pg_backup_directory.c b/src/bin/pg_dump/pg_backup_directory.c index ac81151acc9..cb0f7f31fd7 100644 --- a/src/bin/pg_dump/pg_backup_directory.c +++ b/src/bin/pg_dump/pg_backup_directory.c @@ -346,9 +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)); + } } /* @@ -481,9 +487,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; } @@ -511,9 +523,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)); + } } /* |