Explorar el Código

tar: fix bug with -C and extracting directories

Problem reported by Denis Excoffier in
<http://lists.gnu.org/archive/html/bug-tar/2010-10/msg00034.html>.

* 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.
Paul Eggert hace 14 años
padre
commit
acb77ac5bd
Se han modificado 4 ficheros con 39 adiciones y 1 borrados
  1. 1 1
      src/extract.c
  2. 1 0
      tests/Makefile.am
  3. 36 0
      tests/extrac16.at
  4. 1 0
      tests/testsuite.at

+ 1 - 1
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;

+ 1 - 0
tests/Makefile.am

@@ -82,6 +82,7 @@ TESTSUITE_AT = \
  extrac13.at\
  extrac14.at\
  extrac15.at\
+ extrac16.at\
  filerem01.at\
  filerem02.at\
  gzip.at\

+ 36 - 0
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 <http://www.gnu.org/licenses/>.
+
+# written by Paul Eggert from a bug report by Denis Excoffier
+# <http://lists.gnu.org/archive/html/bug-tar/2010-10/msg00034.html>
+
+# 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

+ 1 - 0
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])