tar: imply --xattrs when --xattrs-{inc,exc}lude used

Options --xattrs-include=MASK and --xattrs-exclude=MASK now turn
on the --xattrs option.

Fix also bug in printing in xattrs.c - don't print when option is
negative.

* src/tar.c (set_xattr_option): New static function.
(parse_opt): Call new function when --xatrrs, --xattrs-include or
--xattrs-exclude option is used.
* src/xattrs.c (xattrs_print, xattrs_print_char): Expect positive
values in options.
This commit is contained in:
Pavel Raiskup
2013-05-23 11:36:23 +02:00
committed by Sergey Poznyakoff
parent 3cb4693c65
commit 8e10d93d01
2 changed files with 15 additions and 7 deletions

View File

@@ -167,6 +167,14 @@ set_archive_format (char const *name)
archive_format = p->fmt;
}
static void
set_xattr_option (int value)
{
if (value == 1)
set_archive_format ("posix");
xattrs_option = value;
}
const char *
archive_format_string (enum archive_format fmt)
{
@@ -2095,16 +2103,16 @@ parse_opt (int key, char *arg, struct argp_state *state)
break;
case XATTR_OPTION:
set_archive_format ("posix");
xattrs_option = 1;
set_xattr_option (1);
break;
case NO_XATTR_OPTION:
xattrs_option = -1;
set_xattr_option (-1);
break;
case XATTR_INCLUDE:
case XATTR_EXCLUDE:
set_xattr_option (1);
xattrs_mask_add (arg, (key == XATTR_INCLUDE));
break;

View File

@@ -695,7 +695,7 @@ xattrs_print_char (struct tar_stat_info const *st, char *output)
if (selinux_context_option > 0 && st->cntx_name)
*output = '.';
if (acls_option && (st->acls_a_len || st->acls_d_len))
if (acls_option > 0 && (st->acls_a_len || st->acls_d_len))
*output = '+';
}
@@ -706,11 +706,11 @@ xattrs_print (struct tar_stat_info const *st)
return;
/* selinux */
if (selinux_context_option && st->cntx_name)
if (selinux_context_option > 0 && st->cntx_name)
fprintf (stdlis, " s: %s\n", st->cntx_name);
/* acls */
if (acls_option && (st->acls_a_len || st->acls_d_len))
if (acls_option > 0 && (st->acls_a_len || st->acls_d_len))
{
fprintf (stdlis, " a: ");
acls_one_line ("", ',', st->acls_a_ptr, st->acls_a_len);
@@ -719,7 +719,7 @@ xattrs_print (struct tar_stat_info const *st)
}
/* xattrs */
if (xattrs_option && st->xattr_map_size)
if (xattrs_option > 0 && st->xattr_map_size)
{
int i;