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:
parent
640fb86b28
commit
87af49f26b
@ -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,
|
||||||
|
Loading…
Reference in New Issue
Block a user