From 87af49f26b2293ab60d0f13d2a14cad66e02a6ff Mon Sep 17 00:00:00 2001
From: Glenn L McGrath <bug1@ihug.co.nz>
Date: Tue, 9 Sep 2003 17:41:03 +0000
Subject: [PATCH] If a tar entry is a regualr file ending in a '/' then its
 really a directory. From http://www.gnu.org/manual/tar/html_node/tar_123.html
 REGTYPE AREGTYPE     These flags represent a regular file. In order to be
 compatible with older versions of tar, a typeflag value of AREGTYPE should be
 silently recognized as a regular file. New archives should be created using
 REGTYPE. Also, for backward compatibility, tar treats a regular file whose
 name ends with a slash as a directory.

---
 archival/libunarchive/get_header_tar.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/archival/libunarchive/get_header_tar.c b/archival/libunarchive/get_header_tar.c
index 3bbe15d36..55c9a22f4 100644
--- a/archival/libunarchive/get_header_tar.c
+++ b/archival/libunarchive/get_header_tar.c
@@ -105,10 +105,6 @@ extern char get_header_tar(archive_handle_t *archive_handle)
 	} else {
 		file_header->name = concat_path_file(tar.formated.prefix, tar.formated.name);
 	}
-	tmp = last_char_is(archive_handle->file_header->name, '/');
-	if (tmp) {
-		*tmp = '\0';
-	}
 
 	file_header->mode = strtol(tar.formated.mode, NULL, 8);
 	file_header->uid = strtol(tar.formated.uid, NULL, 8);
@@ -126,7 +122,11 @@ extern char get_header_tar(archive_handle_t *archive_handle)
 # ifdef CONFIG_FEATURE_TAR_OLDGNU_COMPATABILITY
 	case 0:
 	case '0':
-		file_header->mode |= S_IFREG;
+		if (last_char_is(file_header->name, '/')) {
+			file_header->mode |= S_IFDIR;
+		} else {
+			file_header->mode |= S_IFREG;
+		}
 		break;
 #if 0
 	/* hard links are detected as entries with 0 size, a link name,