Fix aboriginal bug in _tarAddFile(): when complaining that the amount of data
authorTom Lane <[email protected]>
Wed, 29 Aug 2007 16:31:51 +0000 (16:31 +0000)
committerTom Lane <[email protected]>
Wed, 29 Aug 2007 16:31:51 +0000 (16:31 +0000)
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.

src/bin/pg_dump/pg_backup_tar.c

index 311b226e1f0aea17057b1256c2327759d0d90eaf..6f8e2a3d0661da9f2c558e2b5ea8565f2eb08a66 100644 (file)
@@ -1059,6 +1059,7 @@ _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
@@ -1066,13 +1067,12 @@ _tarAddFile(ArchiveHandle *AH, TAR_MEMBER *th)
         */
        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,
                                                 "write error appending to tar archive (wrote %lu, attempted %lu)\n",
@@ -1081,15 +1081,16 @@ _tarAddFile(ArchiveHandle *AH, TAR_MEMBER *th)
        }
 
        if (fclose(tmp) != 0)           /* This *should* delete it... */
-               die_horribly(AH, modulename, "could not close tar member: %s\n", strerror(errno));
+               die_horribly(AH, modulename, "could not close tar member: %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);
        }