From 47560a0498bde20621ce4e367b1d68bf8cd8f1a3 Mon Sep 17 00:00:00 2001 From: Sergey Poznyakoff Date: Sun, 4 Aug 2013 19:00:46 +0300 Subject: [PATCH] Fix interacton of --verbose and --append. * src/buffer.c (_open_archive): don't overwrite existing archive if given the --verify option. * tests/append04.at: New file. * tests/Makefile.am: Add new testcase. * tests/testsuite.at: Add new testcase. * THANKS: Update. --- THANKS | 1 + src/buffer.c | 11 +++++---- tests/Makefile.am | 1 + tests/append04.at | 60 ++++++++++++++++++++++++++++++++++++++++++++++ tests/testsuite.at | 1 + 5 files changed, 69 insertions(+), 5 deletions(-) create mode 100644 tests/append04.at diff --git a/THANKS b/THANKS index c30df33..65f459c 100644 --- a/THANKS +++ b/THANKS @@ -242,6 +242,7 @@ Jim Clausing jac@postbox.acs.ohio-state.edu Jim Farrell jwf@platinum.com Jim Meyering meyering@na-net.ornl.gov Jim Murray jjm@jjm.com +Jivko Angelov jivko@siteground.com Joachim Holzfuss Joachim.Holzfuss@iap.physik.th-darmstadt.de Joachim Seelig joachim@kruemel.han.de Joe DeBattista joed@itsa.ucsf.edu diff --git a/src/buffer.c b/src/buffer.c index 1452940..97084ab 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -722,9 +722,6 @@ _open_archive (enum access_mode wanted_access) break; } } - else if (verify_option) - archive = rmtopen (archive_name_array[0], O_RDWR | O_CREAT | O_BINARY, - MODE_RW, rsh_command_option); else switch (wanted_access) { @@ -740,8 +737,12 @@ _open_archive (enum access_mode wanted_access) maybe_backup_file (archive_name_array[0], 1); backed_up_flag = 1; } - archive = rmtcreat (archive_name_array[0], MODE_RW, - rsh_command_option); + if (verify_option) + archive = rmtopen (archive_name_array[0], O_RDWR | O_CREAT | O_BINARY, + MODE_RW, rsh_command_option); + else + archive = rmtcreat (archive_name_array[0], MODE_RW, + rsh_command_option); break; case ACCESS_UPDATE: diff --git a/tests/Makefile.am b/tests/Makefile.am index e13b079..ab20552 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -51,6 +51,7 @@ TESTSUITE_AT = \ append01.at\ append02.at\ append03.at\ + append04.at\ backup01.at\ chtype.at\ comprec.at\ diff --git a/tests/append04.at b/tests/append04.at new file mode 100644 index 0000000..43b32dd --- /dev/null +++ b/tests/append04.at @@ -0,0 +1,60 @@ +# Process this file with autom4te to create testsuite. -*- Autotest -*- +# +# Test suite for GNU tar. +# Copyright 2013 Free Software Foundation, Inc. +# +# This file is part of GNU tar. +# +# GNU tar 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 of the License, or +# (at your option) any later version. +# +# GNU tar 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 . + +# When called with --append and --verify options, tar would rewrite the +# archive instead of appending to it. +# +# Last-Affected-Version: 1.26 +# Reported-by: Jivko Angelov +# References: <51D6983C.3060404@siteground.com>, +# http://lists.gnu.org/archive/html/bug-tar/2013-07/msg00003.html + +AT_SETUP([append with verify]) +AT_KEYWORDS([append append04 verify append-verify]) + +AT_TAR_CHECK([ +# Create two empty files: +touch file1 file2 + +# Create an archive: +tar cpfW archive.tar file1 file2 + +# Verify created archive by listing its content: +tar -tf archive.tar +echo == +# Create another empty file: +touch file3 + +# Append it to the already created archive: +tar rpfW archive.tar file3 + +# Verify content of the new archive: +tar -tf archive.tar +], +[0], +[file1 +file2 +== +file1 +file2 +file3 +]) + +AT_CLEANUP diff --git a/tests/testsuite.at b/tests/testsuite.at index f1b6cc3..605cca3 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -218,6 +218,7 @@ m4_include([append.at]) m4_include([append01.at]) m4_include([append02.at]) m4_include([append03.at]) +m4_include([append04.at]) AT_BANNER([Transforms]) m4_include([xform-h.at]) -- 2.44.0