X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Fextract.c;h=92f5452a000a9283fa92e001712e8a035bf59156;hb=764174dc1d4b5965c9cbb8f3dbfbf72ebab1ee8a;hp=c699cb239abff2828ec24f44576f6d4b9588f0b6;hpb=908d78d2082f605318be6b6a774676e3319cf650;p=chaz%2Ftar diff --git a/src/extract.c b/src/extract.c index c699cb2..92f5452 100644 --- a/src/extract.c +++ b/src/extract.c @@ -7,7 +7,7 @@ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any later + Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, but @@ -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)))