提交 3b5f5d98 编写于 作者: T Tom Lane

Fix aboriginal bug in _tarAddFile(): when complaining that the amount of data

read from the temp file didn't match the file length reported by ftello(),
the wrong variable's value was printed, and so the message made no sense.
Clean up a couple other coding infelicities while at it.
上级 c7b65930
......@@ -16,7 +16,7 @@
*
*
* IDENTIFICATION
* $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_tar.c,v 1.59 2007/08/06 01:38:15 tgl Exp $
* $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_tar.c,v 1.60 2007/08/29 16:31:36 tgl Exp $
*
*-------------------------------------------------------------------------
*/
......@@ -1059,36 +1059,38 @@ _tarAddFile(ArchiveHandle *AH, TAR_MEMBER *th)
*/
fseeko(tmp, 0, SEEK_END);
th->fileLen = ftello(tmp);
fseeko(tmp, 0, SEEK_SET);
/*
* Some compilers with throw a warning knowing this test can never be true
* because pgoff_t can't exceed the compared maximum.
* Some compilers will throw a warning knowing this test can never be true
* because pgoff_t can't exceed the compared maximum on their platform.
*/
if (th->fileLen > MAX_TAR_MEMBER_FILELEN)
die_horribly(AH, modulename, "archive member too large for tar format\n");
fseeko(tmp, 0, SEEK_SET);
_tarWriteHeader(th);
while ((cnt = fread(&buf[0], 1, 32767, tmp)) > 0)
while ((cnt = fread(buf, 1, sizeof(buf), tmp)) > 0)
{
res = fwrite(&buf[0], 1, cnt, th->tarFH);
res = fwrite(buf, 1, cnt, th->tarFH);
if (res != cnt)
die_horribly(AH, modulename,
"could not write to output file: %s\n", strerror(errno));
"could not write to output file: %s\n",
strerror(errno));
len += res;
}
if (fclose(tmp) != 0) /* This *should* delete it... */
die_horribly(AH, modulename, "could not close temporary file: %s\n", strerror(errno));
die_horribly(AH, modulename, "could not close temporary file: %s\n",
strerror(errno));
if (len != th->fileLen)
{
char buf1[100],
buf2[100];
char buf1[32],
buf2[32];
snprintf(buf1, sizeof(buf1), INT64_FORMAT, (int64) len);
snprintf(buf2, sizeof(buf2), INT64_FORMAT, (int64) th->pos);
snprintf(buf2, sizeof(buf2), INT64_FORMAT, (int64) th->fileLen);
die_horribly(AH, modulename, "actual file length (%s) does not match expected (%s)\n",
buf1, buf2);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册