Fix aboriginal bug in _tarAddFile(): when complaining that the amount of data
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 29 Aug 2007 16:31:36 +0000 (16:31 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 29 Aug 2007 16:31:36 +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 38b1d5e66e86dae33a6b7012c93c5e8ac291bf58..8be6e5edf78d74ec4cccdf62cecef3ca06e371bb 100644 (file)
@@ -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);
    }