Subject: bug#18896: regressions in coreutils 8.23 on Yosemite

From: Jack Howarth <[email-masked]>
Date: Thu, 30 Oct 2014 14:24:08 -0400

On Thu, Oct 30, 2014 at 12:01:17AM +0000, Pádraig Brady wrote:
> On 10/29/2014 11:13 PM, Jack Howarth wrote:
> >    I am finding that the single failure seen on Mavericks for the 
> > coreutils 8.23 testsuite...
> > 
> > FAIL: test-getcwd.sh
> > 
> > =====================================================
> >    GNU coreutils 8.23: gnulib-tests/test-suite.log
> > =====================================================
> 
> The above gnulib issue may occur on Yosemite too but was not run
> due to the new failures below
> 
> > when run as sudo, is replaced by two new errors and two new failures
> > under Yosemite as sudo.
> > 
> > ERROR: tests/cp/link-deref.sh
> > FAIL: tests/cp/link-no-deref.sh
> > 
> > FAIL: tests/cp/link-symlink.sh
> > 
> > ERROR: tests/ln/hard-to-sym.sh
> > 
> > ============================================================================
> > Testsuite summary for GNU coreutils 8.23
> > ============================================================================
> > # TOTAL: 563
> > # PASS:  397
> > # SKIP:  162
> > # XFAIL: 0
> > # FAIL:  2
> > # XPASS: 0
> > # ERROR: 2
> 
> All these failures and errors are due to trying to create
> a hardlink to a symlink and getting an "Operation not supported" error.
> 
> Can you send the output of this command?
>   $ grep -E "(LINK_F|LINKAT)" lib/config.h

On x86_64-apple-darwin13 which doesn't show these failures, I see...

#define GNULIB_AREADLINKAT 1
#define GNULIB_TEST_LINKAT 1
#define GNULIB_TEST_READLINKAT 1
#define GNULIB_TEST_SYMLINKAT 1
#define GNULIB_TEST_UNLINKAT 1
/* #undef HAVE_LINKAT */
/* #undef HAVE_READLINKAT */
/* #undef HAVE_SYMLINKAT */
/* #undef HAVE_UNLINKAT */
/* #undef LINKAT_TRAILING_SLASH_BUG */
#define LINK_FOLLOWS_SYMLINKS 1

whereas on x86_64-apple-darwin14, I get...

#define GNULIB_AREADLINKAT 1
#define GNULIB_TEST_LINKAT 1
#define GNULIB_TEST_READLINKAT 1
#define GNULIB_TEST_SYMLINKAT 1
#define GNULIB_TEST_UNLINKAT 1
#define HAVE_LINKAT 1
#define HAVE_READLINKAT 1
#define HAVE_SYMLINKAT 1
#define HAVE_UNLINKAT 1
/* #undef LINKAT_TRAILING_SLASH_BUG */
#define LINK_FOLLOWS_SYMLINKS 1

> 
> What file system type are you running this one?

Both filesystems are

   File System Personality:  Journaled HFS+
   Type (Bundle):            hfs
   Name (User Visible):      Mac OS Extended (Journaled)
   Journal:                  Journal size 81920 KB at offset 0x1d1c000
   Owners:                   Enabled

> 
> I suspect that this might help?
> 
> diff --git a/lib/linkat.c b/lib/linkat.c
> index 6ee30fb..fd6bd1c 100644
> --- a/lib/linkat.c
> +++ b/lib/linkat.c
> @@ -329,7 +329,8 @@ rpl_linkat (int fd1, char const *file1, int fd2, char const *file2, int flag)
>      if (0 <= have_follow_really)
>      {
>        int result = linkat (fd1, file1, fd2, file2, flag);
> -      if (!(result == -1 && errno == EINVAL))
> +      if (!(result == -1 && (errno == EINVAL || errno == ENOTSUP
> +                             || errno == EOPNOTSUPP)))
>          {
>            have_follow_really = 1;
>            return result;

Unfortunately, with this patch, I still see the failures on x86_64-apple-darwin14.

link-deref.sh: set-up failure: 
ERROR: tests/cp/link-deref.sh
FAIL: tests/cp/link-no-deref.sh
FAIL: tests/cp/link-symlink.sh
hard-to-sym.sh: set-up failure: 
ERROR: tests/ln/hard-to-sym.sh

Do we need to handle darwin14 differently now that it sets...

#define HAVE_LINKAT 1
#define HAVE_READLINKAT 1
#define HAVE_SYMLINKAT 1
#define HAVE_UNLINKAT 1

which was never tested on darwin before?
          Jack