mirror of
https://github.com/postgres/postgres.git
synced 2025-05-03 22:24:49 +03:00
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
This commit is contained in:
parent
9496908d46
commit
83762d0a92
@ -751,8 +751,12 @@ writeTarData(
|
|||||||
#ifdef HAVE_LIBZ
|
#ifdef HAVE_LIBZ
|
||||||
if (ztarfile != NULL)
|
if (ztarfile != NULL)
|
||||||
{
|
{
|
||||||
|
errno = 0;
|
||||||
if (gzwrite(ztarfile, buf, r) != r)
|
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,
|
fprintf(stderr,
|
||||||
_("%s: could not write to compressed file \"%s\": %s\n"),
|
_("%s: could not write to compressed file \"%s\": %s\n"),
|
||||||
progname, current_file, get_gz_error(ztarfile));
|
progname, current_file, get_gz_error(ztarfile));
|
||||||
@ -762,8 +766,12 @@ writeTarData(
|
|||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
errno = 0;
|
||||||
if (fwrite(buf, r, 1, tarfile) != 1)
|
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"),
|
fprintf(stderr, _("%s: could not write to file \"%s\": %s\n"),
|
||||||
progname, current_file, strerror(errno));
|
progname, current_file, strerror(errno));
|
||||||
disconnect_and_exit(1);
|
disconnect_and_exit(1);
|
||||||
@ -1368,8 +1376,12 @@ ReceiveAndUnpackTarFile(PGconn *conn, PGresult *res, int rownum)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
errno = 0;
|
||||||
if (fwrite(copybuf, r, 1, file) != 1)
|
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"),
|
fprintf(stderr, _("%s: could not write to file \"%s\": %s\n"),
|
||||||
progname, filename, strerror(errno));
|
progname, filename, strerror(errno));
|
||||||
disconnect_and_exit(1);
|
disconnect_and_exit(1);
|
||||||
|
@ -356,10 +356,15 @@ _WriteData(ArchiveHandle *AH, const void *data, size_t dLen)
|
|||||||
{
|
{
|
||||||
lclContext *ctx = (lclContext *) AH->formatData;
|
lclContext *ctx = (lclContext *) AH->formatData;
|
||||||
|
|
||||||
|
errno = 0;
|
||||||
if (dLen > 0 && cfwrite(data, dLen, ctx->dataFH) != dLen)
|
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",
|
exit_horribly(modulename, "could not write to output file: %s\n",
|
||||||
get_cfp_error(ctx->dataFH));
|
get_cfp_error(ctx->dataFH));
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -496,9 +501,15 @@ _WriteByte(ArchiveHandle *AH, const int i)
|
|||||||
unsigned char c = (unsigned char) i;
|
unsigned char c = (unsigned char) i;
|
||||||
lclContext *ctx = (lclContext *) AH->formatData;
|
lclContext *ctx = (lclContext *) AH->formatData;
|
||||||
|
|
||||||
|
errno = 0;
|
||||||
if (cfwrite(&c, 1, ctx->dataFH) != 1)
|
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",
|
exit_horribly(modulename, "could not write to output file: %s\n",
|
||||||
get_cfp_error(ctx->dataFH));
|
get_cfp_error(ctx->dataFH));
|
||||||
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -526,9 +537,15 @@ _WriteBuf(ArchiveHandle *AH, const void *buf, size_t len)
|
|||||||
{
|
{
|
||||||
lclContext *ctx = (lclContext *) AH->formatData;
|
lclContext *ctx = (lclContext *) AH->formatData;
|
||||||
|
|
||||||
|
errno = 0;
|
||||||
if (cfwrite(buf, len, ctx->dataFH) != len)
|
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",
|
exit_horribly(modulename, "could not write to output file: %s\n",
|
||||||
get_cfp_error(ctx->dataFH));
|
get_cfp_error(ctx->dataFH));
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user