From acb77ac5bd4bf9248070c9c512525eee8258aebd Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Mon, 25 Oct 2010 20:20:19 -0700 Subject: [PATCH] tar: fix bug with -C and extracting directories Problem reported by Denis Excoffier in . * src/extract.c (extract_dir): Use mkdirat, not mkdir. * tests/extrac16.at: New file, to test for this bug. * tests/Makefile.am (TESTSUITE_AT): Add it. * tests/testsuite.at: Include it. This file is a placeholder. It will be replaced with the actual ChangeLog by make dist. Run make ChangeLog if you wish to create it earlier. --- src/extract.c | 2 +- tests/Makefile.am | 1 + tests/extrac16.at | 36 ++++++++++++++++++++++++++++++++++++ tests/testsuite.at | 1 + 4 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 tests/extrac16.at diff --git a/src/extract.c b/src/extract.c index 0d23d4a..98236ac 100644 --- a/src/extract.c +++ b/src/extract.c @@ -777,7 +777,7 @@ extract_dir (char *file_name, int typeflag) for (;;) { - status = mkdir (file_name, mode); + status = mkdirat (chdir_fd, file_name, mode); if (status == 0) { current_mode = mode & ~ current_umask; diff --git a/tests/Makefile.am b/tests/Makefile.am index d29563a..b71e83c 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -82,6 +82,7 @@ TESTSUITE_AT = \ extrac13.at\ extrac14.at\ extrac15.at\ + extrac16.at\ filerem01.at\ filerem02.at\ gzip.at\ diff --git a/tests/extrac16.at b/tests/extrac16.at new file mode 100644 index 0000000..625e579 --- /dev/null +++ b/tests/extrac16.at @@ -0,0 +1,36 @@ +# Process this file with autom4te to create testsuite. -*- Autotest -*- + +# Test suite for GNU tar. +# Copyright (C) 2010 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 . + +# written by Paul Eggert from a bug report by Denis Excoffier +# + +# Check extraction of empty directory with -C. + +AT_SETUP([extract empty directory with -C]) +AT_KEYWORDS([extract extrac16]) + +AT_TAR_CHECK([ +mkdir src src/a src/a/b dest +touch src/a/c + +tar -cf archive.tar -C src a && +tar -xf archive.tar -C dest +], +[0],[],[],[],[],[gnu]) + +AT_CLEANUP diff --git a/tests/testsuite.at b/tests/testsuite.at index c386892..40f0e41 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -154,6 +154,7 @@ m4_include([extrac12.at]) m4_include([extrac13.at]) m4_include([extrac14.at]) m4_include([extrac15.at]) +m4_include([extrac16.at]) m4_include([label01.at]) m4_include([label02.at]) -- 2.45.2