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];