From 8e10d93d01049d4c5c58ebe57da499a3873be9db Mon Sep 17 00:00:00 2001 From: Pavel Raiskup Date: Thu, 23 May 2013 11:36:23 +0200 Subject: [PATCH] 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. --- src/tar.c | 14 +++++++++++--- src/xattrs.c | 8 ++++---- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/tar.c b/src/tar.c index 8524809..08f334f 100644 --- a/src/tar.c +++ b/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; diff --git a/src/xattrs.c b/src/xattrs.c index dbe4966..dbaa209 100644 --- a/src/xattrs.c +++ b/src/xattrs.c @@ -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; -- 2.45.2