X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Fextract.c;h=e62671e985fb32076623a5c7a06f6c273c4d9e0a;hb=7eeb467132fbc37dff8a008c33f4e277291a4609;hp=1731b3a8237e976af3c085dbbedac8d4a4438774;hpb=87fa28ed2abd92693a08e58523d7ab7f7c4563f0;p=chaz%2Ftar diff --git a/src/extract.c b/src/extract.c index 1731b3a..e62671e 100644 --- a/src/extract.c +++ b/src/extract.c @@ -572,7 +572,7 @@ extract_archive (void) if (verbose_option) print_header (¤t_stat_info, -1); - file_name = safer_name_suffix (current_stat_info.file_name, 0); + file_name = safer_name_suffix (current_stat_info.file_name, false); if (strip_path_elements) { size_t prefix_len = stripped_prefix_len (file_name, strip_path_elements); @@ -601,6 +601,11 @@ extract_archive (void) /* Extract the archive entry according to its type. */ typeflag = current_header->header.typeflag; + /*KLUDGE */ + if (current_format == POSIX_FORMAT + && current_stat_info.archive_file_size != current_stat_info.stat.st_size) + typeflag = GNUTYPE_SPARSE; + switch (typeflag) { case GNUTYPE_SPARSE: @@ -856,7 +861,8 @@ extract_archive (void) again_link: { - char const *link_name = safer_name_suffix (current_stat_info.link_name, 1); + char const *link_name = safer_name_suffix (current_stat_info.link_name, + true); struct stat st1, st2; int e;