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:
committed by
Sergey Poznyakoff
parent
3cb4693c65
commit
8e10d93d01
14
src/tar.c
14
src/tar.c
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user