diff options
author | Sergey Poznyakoff <gray@gnu.org.ua> | 2017-11-09 09:55:43 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org.ua> | 2017-11-09 09:55:43 +0200 |
commit | 1bf590ab2da3c40d68d2b4167e494c786ffda6e7 (patch) | |
tree | d8565033b1d16c595bb9fd221a328d01994489a6 | |
parent | dee7e3f16e74e07504bb8f4d80426005fe4364ae (diff) | |
download | tar-1bf590ab2da3c40d68d2b4167e494c786ffda6e7.tar.gz |
Fix reporting of hardlink mismatch during compare
* src/common.h (quote_n_colon): New prototype.
* src/misc.c (quote_n_colon): New function.
* src/compare.c (report_difference, diff_link): Use quote_n_colon.
* tests/difflink.at: New file.
* tests/Makefile.am: Add difflink.at
* tests/testsuite.at: Likewise.
-rw-r--r-- | src/common.h | 2 | ||||
-rw-r--r-- | src/compare.c | 7 | ||||
-rw-r--r-- | src/misc.c | 5 | ||||
-rw-r--r-- | tests/Makefile.am | 1 | ||||
-rw-r--r-- | tests/difflink.at | 35 | ||||
-rw-r--r-- | tests/testsuite.at | 3 |
6 files changed, 51 insertions, 2 deletions
diff --git a/src/common.h b/src/common.h index 99a1dd8e..e49bd9f1 100644 --- a/src/common.h +++ b/src/common.h @@ -619,6 +619,8 @@ void skip_member (void); #define min(a, b) ((a) < (b) ? (a) : (b)) #define max(a, b) ((a) < (b) ? (b) : (a)) + +char const *quote_n_colon (int n, char const *arg); void assign_string (char **dest, const char *src); int unquote_string (char *str); char *zap_slashes (char *name); diff --git a/src/compare.c b/src/compare.c index 32ec8710..8d609e89 100644 --- a/src/compare.c +++ b/src/compare.c @@ -51,6 +51,8 @@ diff_init (void) read_directory_file (); } +enum { QUOTE_ARG, QUOTE_NAME }; + /* Sigh about something that differs by writing a MESSAGE to stdlis, given MESSAGE is nonzero. Also set the exit status if not already. */ void @@ -60,7 +62,7 @@ report_difference (struct tar_stat_info *st, const char *fmt, ...) { va_list ap; - fprintf (stdlis, "%s: ", quotearg_colon (st->file_name)); + fprintf (stdlis, "%s: ", quote_n_colon (QUOTE_NAME, st->file_name)); va_start (ap, fmt); vfprintf (stdlis, fmt, ap); va_end (ap); @@ -263,7 +265,8 @@ diff_link (void) && !sys_compare_links (&file_data, &link_data)) report_difference (¤t_stat_info, _("Not linked to %s"), - quote (current_stat_info.link_name)); + quote_n_colon (QUOTE_ARG, + current_stat_info.link_name)); } #ifdef HAVE_READLINK @@ -33,6 +33,11 @@ static void namebuf_add_dir (namebuf_t, char const *); static char *namebuf_finish (namebuf_t); static const char *tar_getcdpath (int); +char const * +quote_n_colon (int n, char const *arg) +{ + return quotearg_n_style_colon (n, get_quoting_style (NULL), arg); +} /* Handling strings. */ diff --git a/tests/Makefile.am b/tests/Makefile.am index be21efaf..88d183b0 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -71,6 +71,7 @@ TESTSUITE_AT = \ delete03.at\ delete04.at\ delete05.at\ + difflink.at\ exclude.at\ exclude01.at\ exclude02.at\ diff --git a/tests/difflink.at b/tests/difflink.at new file mode 100644 index 00000000..eadfb088 --- /dev/null +++ b/tests/difflink.at @@ -0,0 +1,35 @@ +# This file is part of GNU tar test suite -*- Autotest -*- +# +# Copyright 2017 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +AT_SETUP([link mismatch]) +AT_KEYWORDS([diff difflink]) +AT_TAR_CHECK([ +mkdir a +genfile -f a/x +ln -s x a/y +ln a/y a/z +tar cf a.tar a +rm a/z +ln -s x a/z +tar df a.tar +], +[1], +[a/z: Not linked to a/y +], +[], +[],[],[ustar]) # Testing one format is enough +AT_CLEANUP + diff --git a/tests/testsuite.at b/tests/testsuite.at index 7682a03e..1f2c4ce9 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -310,6 +310,9 @@ m4_include([extrac19.at]) m4_include([extrac20.at]) m4_include([backup01.at]) +AT_BANNER([Comparing]) +m4_include([difflink.at]) + AT_BANNER([Volume label operations]) m4_include([label01.at]) m4_include([label02.at]) |