diff --git a/src/bin/pg_dump/pg_backup_tar.c b/src/bin/pg_dump/pg_backup_tar.c
index b18f4856e8800a0aae062150d86c7c79fc3bd052..5b38d4615b4ca145366aa8745d2a0b7bf770f2ad 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.47 2005/01/25 22:44:31 tgl Exp $
+ *		$PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_tar.c,v 1.48 2005/06/22 02:00:47 neilc Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1155,7 +1155,6 @@ _tarGetHeader(ArchiveHandle *AH, TAR_MEMBER *th)
 	size_t		len;
 	unsigned long ullen;
 	off_t		hPos;
-	int			i;
 	bool		gotBlock = false;
 
 	while (!gotBlock)
@@ -1178,7 +1177,7 @@ _tarGetHeader(ArchiveHandle *AH, TAR_MEMBER *th)
 		hPos = ctx->tarFHpos;
 
 		/* Read a 512 byte block, return EOF, exit if short */
-		len = _tarReadRaw(AH, &h[0], 512, NULL, ctx->tarFH);
+		len = _tarReadRaw(AH, h, 512, NULL, ctx->tarFH);
 		if (len == 0)			/* EOF */
 			return 0;
 
@@ -1188,20 +1187,22 @@ _tarGetHeader(ArchiveHandle *AH, TAR_MEMBER *th)
 						 (unsigned long) len);
 
 		/* Calc checksum */
-		chk = _tarChecksum(&h[0]);
+		chk = _tarChecksum(h);
+		sscanf(&h[148], "%8o", &sum);
 
 		/*
-		 * If the checksum failed, see if it is a null block. If so, then
-		 * just try with next block...
+		 * If the checksum failed, see if it is a null block. If so,
+		 * silently continue to the next block.
 		 */
-
 		if (chk == sum)
 			gotBlock = true;
 		else
 		{
+			int			i;
+
 			for (i = 0; i < 512; i++)
 			{
-				if (h[0] != 0)
+				if (h[i] != 0)
 				{
 					gotBlock = true;
 					break;
@@ -1213,7 +1214,6 @@ _tarGetHeader(ArchiveHandle *AH, TAR_MEMBER *th)
 	sscanf(&h[0], "%99s", tag);
 	sscanf(&h[124], "%12lo", &ullen);
 	len = (size_t) ullen;
-	sscanf(&h[148], "%8o", &sum);
 
 	{
 		char		buf[100];