X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Fextract.c;h=1f231e38e335c15b103643ee7522952ac5e1f4a1;hb=080a6b2ac52ece6bdfbe7d1daadffa2585887646;hp=c699cb239abff2828ec24f44576f6d4b9588f0b6;hpb=908d78d2082f605318be6b6a774676e3319cf650;p=chaz%2Ftar diff --git a/src/extract.c b/src/extract.c index c699cb2..1f231e3 100644 --- a/src/extract.c +++ b/src/extract.c @@ -766,6 +766,7 @@ extract_file (char *file_name, int typeflag) if (fd < 0) { + skip_member (); open_error (file_name); return 1; } @@ -913,10 +914,12 @@ create_placeholder_file (char *file_name, bool is_symlink, int *interdir_made) static int extract_link (char *file_name, int typeflag) { - char const *link_name = safer_name_suffix (current_stat_info.link_name, - true, absolute_names_option); int interdir_made = 0; + char const *link_name; + transform_member_name (¤t_stat_info.link_name, xform_link); + link_name = current_stat_info.link_name; + if (! absolute_names_option && contains_dot_dot (link_name)) return create_placeholder_file (file_name, false, &interdir_made); @@ -971,6 +974,8 @@ extract_symlink (char *file_name, int typeflag) int status; int interdir_made = 0; + transform_member_name (¤t_stat_info.link_name, xform_symlink); + if (! absolute_names_option && (IS_ABSOLUTE_FILE_NAME (current_stat_info.link_name) || contains_dot_dot (current_stat_info.link_name)))