bug-tar
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Bug-tar] GNU Tar 1.28 configuration test for deep directory hierarc


From: Paul Eggert
Subject: Re: [Bug-tar] GNU Tar 1.28 configuration test for deep directory hierarchy failing on Mac OS X 10.11 El Capitan
Date: Tue, 13 Oct 2015 11:39:55 -0700
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.1.0

On 10/12/2015 02:00 PM, Jonathan Leffler wrote:
1. Has anyone else seen anything similar on El Capitan?
2. Does anyone have an idea how to get rid of the trashed directories?
3. How can we modify the test so it doesn't fail catastrophically like this on El Capitan? 4. Do I need to report a bug to Apple separately from this report to GNU Tar?

For (4), OS X is clearly busted here. A user-mode application shouldn't be able to create a directory that 'rm -fr' can't remove. Please feel free to report the bug to Apple. The problem will occur with many GNU tools' installation procedure, as they're all using Gnulib and Gnulib tries to check for getcwd bugs like this one.

For (2) I suggest using coreutils; 'rm -fr directory should do the trick if you're using GNU rm.

For (3) we need to figure out why the test doesn't clean up after itself on El Capitan. It's supposed to. Please compile and run the attached test program in a place where you don't mind having long directory chains. On my GNU/Linux host, I can do something like this:

  gcc t.c
  strace ./a.out

and the 'strace' output contains the following, showing that the test program cleans up after itself. Please find out why it's not doing so under El Capitan. OS X lacks strace, but you can use a debugger or dtruss or whatever your favorite tool is. Thanks.

mkdir("confdir-14B---", 0700)           = 0
chdir("confdir-14B---")                 = 0
mkdir("confdir-14B---", 0700)           = 0
chdir("confdir-14B---")                 = 0
...
mkdir("confdir-14B---", 0700)           = 0
chdir("confdir-14B---")                 = 0
getcwd(0x1736010, 4096) = -1 ENAMETOOLONG (File name too long) [a whole bunch of other stuff, which eventually succeeds. Now comes cleanup time....] rmdir("confdir-14B---") = -1 ENOENT (No such file or directory)
chdir("..")                             = 0
rmdir("confdir-14B---")                 = 0
chdir("..")                             = 0
...
chdir("..")                             = 0
rmdir("confdir-14B---")                 = 0
exit_group(0)                           = ?

Attachment: t.c
Description: Text document


reply via email to

[Prev in Thread] Current Thread [Next in Thread]