diff options
author | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2020-06-19 16:46:06 -0400 |
---|---|---|
committer | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2020-06-19 16:46:06 -0400 |
commit | bbbce94dc262fa255ec53a9949f899369afdb4e7 (patch) | |
tree | 46c6d0275cd28e08d1879ce24e99a9ae059d32ce /src/bin/pg_basebackup/pg_basebackup.c | |
parent | 34ef5863c77bb070a6faf136a06728961d6e2a72 (diff) |
Ensure write failure reports no-disk-space
A few places calling fwrite and gzwrite were not setting errno to ENOSPC
when reporting errors, as is customary; this led to some failures being
reported as
"could not write file: Success"
which makes us look silly. Make a few of these places in pg_dump and
pg_basebackup use our customary pattern.
Backpatch-to: 9.5
Author: Justin Pryzby <pryzby@telsasoft.com>
Author: Tom Lane <tgl@sss.pgh.pa.us>
Author: Álvaro Herrera <alvherre@alvh.no-ip.org>
Discussion: https://postgr.es/m/20200611153753.GU14879@telsasoft.com
Diffstat (limited to 'src/bin/pg_basebackup/pg_basebackup.c')
-rw-r--r-- | src/bin/pg_basebackup/pg_basebackup.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c index d9801edd760..49417084c43 100644 --- a/src/bin/pg_basebackup/pg_basebackup.c +++ b/src/bin/pg_basebackup/pg_basebackup.c @@ -740,8 +740,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; fprintf(stderr, _("%s: could not write to compressed file \"%s\": %s\n"), progname, current_file, get_gz_error(ztarfile)); @@ -751,8 +755,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; fprintf(stderr, _("%s: could not write to file \"%s\": %s\n"), progname, current_file, strerror(errno)); disconnect_and_exit(1); @@ -1357,8 +1365,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; fprintf(stderr, _("%s: could not write to file \"%s\": %s\n"), progname, filename, strerror(errno)); disconnect_and_exit(1); |