From 330b4e42150d3040c221f6be0e8236761abe2f79 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Sat, 1 Feb 2003 19:29:16 +0000
Subject: [PATCH] Changes of 6-Sep-02 broke pg_restore's ability to recognize
 tar-format files.  Fix it.

---
 src/bin/pg_dump/pg_backup_archiver.h |  4 ++--
 src/bin/pg_dump/pg_backup_tar.c      | 16 +++++++++++++---
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/src/bin/pg_dump/pg_backup_archiver.h b/src/bin/pg_dump/pg_backup_archiver.h
index 73b5c29c329..078ecb9c983 100644
--- a/src/bin/pg_dump/pg_backup_archiver.h
+++ b/src/bin/pg_dump/pg_backup_archiver.h
@@ -17,7 +17,7 @@
  *
  *
  * IDENTIFICATION
- *		$Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_archiver.h,v 1.49 2002/10/25 01:33:17 momjian Exp $
+ *		$Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_archiver.h,v 1.50 2003/02/01 19:29:16 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -309,7 +309,7 @@ extern void InitArchiveFmt_Files(ArchiveHandle *AH);
 extern void InitArchiveFmt_Null(ArchiveHandle *AH);
 extern void InitArchiveFmt_Tar(ArchiveHandle *AH);
 
-extern int	isValidTarHeader(char *header);
+extern bool isValidTarHeader(char *header);
 
 extern OutputContext SetOutput(ArchiveHandle *AH, char *filename, int compression);
 extern void ResetOutput(ArchiveHandle *AH, OutputContext savedContext);
diff --git a/src/bin/pg_dump/pg_backup_tar.c b/src/bin/pg_dump/pg_backup_tar.c
index 867d55e467e..7003b4c6428 100644
--- a/src/bin/pg_dump/pg_backup_tar.c
+++ b/src/bin/pg_dump/pg_backup_tar.c
@@ -16,7 +16,7 @@
  *
  *
  * IDENTIFICATION
- *		$Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_tar.c,v 1.33 2003/01/10 23:49:06 tgl Exp $
+ *		$Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_tar.c,v 1.34 2003/02/01 19:29:16 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -981,7 +981,7 @@ _tarChecksum(char *header)
 	return sum + 256;			/* Assume 8 blanks in checksum field */
 }
 
-int
+bool
 isValidTarHeader(char *header)
 {
 	int			sum;
@@ -989,7 +989,17 @@ isValidTarHeader(char *header)
 
 	sscanf(&header[148], "%8o", &sum);
 
-	return (sum == chk && strncmp(&header[257], "ustar  ", 7) == 0);
+	if (sum != chk)
+		return false;
+
+	/* POSIX format */
+	if (strncmp(&header[257], "ustar00", 7) == 0)
+		return true;
+	/* older format */
+	if (strncmp(&header[257], "ustar  ", 7) == 0)
+		return true;
+
+	return false;
 }
 
 /* Given the member, write the TAR header & copy the file */
-- 
GitLab