X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Flist.c;h=2436901bdfbd35a332742059d5f786f2a0ddb002;hb=1bcbbcf1ff2c537ffa970dbf82e3843d4ad110e5;hp=b17f604303f60dac99f8c14f14338d0cf0091f82;hpb=3c4f4ca4235a000068817ea54f80b32002a1010c;p=chaz%2Ftar diff --git a/src/list.c b/src/list.c index b17f604..2436901 100644 --- a/src/list.c +++ b/src/list.c @@ -141,8 +141,9 @@ read_and (void (*do_something) (void)) status = read_header (false); if (status == HEADER_ZERO_BLOCK) break; - WARN ((0, 0, _("A lone zero block at %s"), - STRINGIFY_BIGINT (current_block_ordinal (), buf))); + WARNOPT (WARN_ALONE_ZERO_BLOCK, + (0, 0, _("A lone zero block at %s"), + STRINGIFY_BIGINT (current_block_ordinal (), buf))); break; } status = prev_status; @@ -472,11 +473,11 @@ read_header (bool raw_extended_headers) static char * decode_xform (char *file_name, void *data) { - xform_type type = *(xform_type*)data; + int type = *(int*)data; switch (type) { - case xform_symlink: + case XFORM_SYMLINK: /* FIXME: It is not quite clear how and to which extent are the symbolic links subject to filename transformation. In the absence of another solution, symbolic links are exempt from component stripping and @@ -484,11 +485,11 @@ decode_xform (char *file_name, void *data) proper. */ return file_name; - case xform_link: + case XFORM_LINK: file_name = safer_name_suffix (file_name, true, absolute_names_option); break; - case xform_regfile: + case XFORM_REGFILE: file_name = safer_name_suffix (file_name, false, absolute_names_option); break; } @@ -505,9 +506,9 @@ decode_xform (char *file_name, void *data) } bool -transform_member_name (char **pinput, xform_type type) +transform_member_name (char **pinput, int type) { - return transform_name_fp (pinput, decode_xform, &type); + return transform_name_fp (pinput, type, decode_xform, &type); } #define ISOCTAL(c) ((c)>='0'&&(c)<='7') @@ -628,7 +629,16 @@ decode_header (union block *header, struct tar_stat_info *stat_info, stat_info->is_dumpdir = true; } - transform_member_name (&stat_info->file_name, xform_regfile); + transform_member_name (&stat_info->file_name, XFORM_REGFILE); + switch (header->header.typeflag) + { + case SYMTYPE: + transform_member_name (&stat_info->link_name, XFORM_SYMLINK); + break; + + case LNKTYPE: + transform_member_name (&stat_info->link_name, XFORM_LINK); + } } /* Convert buffer at WHERE0 of size DIGS from external format to