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.
This commit is contained in:
Glenn L McGrath 2003-09-09 17:41:03 +00:00
parent 640fb86b28
commit 87af49f26b

View File

@ -105,10 +105,6 @@ extern char get_header_tar(archive_handle_t *archive_handle)
} else { } else {
file_header->name = concat_path_file(tar.formated.prefix, tar.formated.name); 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->mode = strtol(tar.formated.mode, NULL, 8);
file_header->uid = strtol(tar.formated.uid, 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 # ifdef CONFIG_FEATURE_TAR_OLDGNU_COMPATABILITY
case 0: case 0:
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; break;
#if 0 #if 0
/* hard links are detected as entries with 0 size, a link name, /* hard links are detected as entries with 0 size, a link name,