(decode_xform): Exempt symbolic links from component

stripping and name suffix normalization.
This commit is contained in:
Sergey Poznyakoff
2007-06-01 21:24:30 +00:00
parent 080a6b2ac5
commit fe576585e6

View File

@@ -472,9 +472,27 @@ read_header (bool raw_extended_headers)
static char *
decode_xform (char *file_name, void *data)
{
bool link_target = *(bool*)data;
file_name = safer_name_suffix (file_name, link_target,
absolute_names_option);
xform_type type = *(xform_type*)data;
switch (type)
{
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
name suffix normalization, but subject to filename transformation
proper. */
return file_name;
case xform_link:
file_name = safer_name_suffix (file_name, true, absolute_names_option);
break;
case xform_regfile:
file_name = safer_name_suffix (file_name, false, absolute_names_option);
break;
}
if (strip_name_components)
{
size_t prefix_len = stripped_prefix_len (file_name,
@@ -487,9 +505,9 @@ decode_xform (char *file_name, void *data)
}
bool
transform_member_name (char **pinput, bool lnk)
transform_member_name (char **pinput, xform_type type)
{
return transform_name_fp (pinput, decode_xform, &lnk);
return transform_name_fp (pinput, decode_xform, &type);
}
#define ISOCTAL(c) ((c)>='0'&&(c)<='7')
@@ -610,7 +628,7 @@ decode_header (union block *header, struct tar_stat_info *stat_info,
stat_info->is_dumpdir = true;
}
transform_member_name (&stat_info->file_name, false);
transform_member_name (&stat_info->file_name, xform_regfile);
}
/* Convert buffer at WHERE0 of size DIGS from external format to