فهرست منبع

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 14 سال پیش
والد
کامیت
acb77ac5bd
4فایلهای تغییر یافته به همراه39 افزوده شده و 1 حذف شده
  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])