diff --git a/src/bin/pg_dump/pg_backup_tar.c b/src/bin/pg_dump/pg_backup_tar.c index 38b1d5e66e..8be6e5edf7 100644 --- a/src/bin/pg_dump/pg_backup_tar.c +++ b/src/bin/pg_dump/pg_backup_tar.c @@ -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); }