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

From: Pádraig Brady <[email-masked]>
Date: Tue, 04 Nov 2014 01:29:39 +0100

On 11/03/2014 10:58 PM, Jack Howarth wrote:
> On Mon, Nov 03, 2014 at 03:16:58PM +0100, Pádraig Brady wrote:
>> On 10/31/2014 05:03 PM, Pádraig Brady wrote:
>>> On 10/31/2014 03:41 PM, Jack Howarth wrote:
>>>> On Fri, Oct 31, 2014 at 03:56:06AM +0000, Pádraig Brady wrote:
>>>>> On 10/31/2014 03:30 AM, Jack Howarth wrote:
>>>>>> On Fri, Oct 31, 2014 at 02:29:05AM +0000, Pádraig Brady wrote:
>>>>>>>
>>>>>>> So linkat() is now available but doesn't support hardlinks to symlinks
>>>>>>> contrary to the POSIX spec. So it would be best we consider linkat()
>>>>>>> unavailable, which can be done manually like:
>>>>>>>
>>>>>>>   ac_cv_func_linkat=no ./configure
>>>>>>>
>>>>>>> We'll have to augment the gnulib linkat check to actually check
>>>>>>> that linkat() works, rather than just being available.
>>>>>>
>>>>>> Passing ac_cv_func_linkat=no to configure and using your attached patch
>>>>>> results in a large number of failures on x86_64-apple-darwin14.
>>>>>
>>>>> Good that's better. coreutils tests have passed, and you're getting
>>>>> to gnulib issues below.
>>
>> I pushed the following slightly different more general patch
>> to gnulib to address this issue:
>> http://git.sv.gnu.org/gitweb/?p=gnulib.git;a=commitdiff;h=c8e57ce5
>>
>> thanks,
>> Pádraig.
> 
> Pádraig,
>      I puzzled out the problem with the strtoll test compilation. I have 
> been using...
> 
> ./configure CPPFLAGS="-Wall -std=c89"
> 
> but it appears it needs to be...
> 
> ./configure CPPFLAGS="-Wall -std=c99"
> 
> on darwin14. The current gnulib git at your commit and the changes...
> 
> diff --git a/lib/symlinkat.c b/lib/symlinkat.c
> index 9797f46..5df605f 100644
> --- a/lib/symlinkat.c
> +++ b/lib/symlinkat.c
> @@ -20,6 +20,8 @@
>  
>  #include <unistd.h>
>  #include <errno.h>
> +#include <string.h>
> +#include <sys/stat.h>
>  
>  #if HAVE_SYMLINKAT
>  # undef symlinkat
> diff --git a/tests/test-stdnoreturn.c b/tests/test-stdnoreturn.c
> index a8aead8..04107bc 100644
> --- a/tests/test-stdnoreturn.c
> +++ b/tests/test-stdnoreturn.c
> @@ -18,6 +18,8 @@
>  
>  #include <config.h>
>  
> +#include <unistd.h>
> +

Thanks for tracking these missing includes down.
We should add those to gnulib.

> passes 'make' but the 'make check' produces 9 failures...

> ../build-aux/test-driver: line 107:  3918 Abort trap: 6           "$@" > $log_file 2>&1
> FAIL: test-getlogin_r
> ../build-aux/test-driver: line 107:  3925 Abort trap: 6           "$@" > $log_file 2>&1
> FAIL: test-getopt
> ../build-aux/test-driver: line 107:  4246 Abort trap: 6           "$@" > $log_file 2>&1
> FAIL: test-linkat
> ../build-aux/test-driver: line 107:  5143 Abort trap: 6           "$@" > $log_file 2>&1
> FAIL: test-readlinkat
> ../build-aux/test-driver: line 107:  5498 Abort trap: 6           "$@" > $log_file 2>&1
> FAIL: test-snprintf-posix
> ../build-aux/test-driver: line 107:  5522 Abort trap: 6           "$@" > $log_file 2>&1
> FAIL: test-sprintf-posix
> ../build-aux/test-driver: line 107:  6031 Abort trap: 6           "$@" > $log_file 2>&1
> FAIL: test-unlinkat
> ../build-aux/test-driver: line 107:  6225 Abort trap: 6           "$@" > $log_file 2>&1
> FAIL: test-vsnprintf-posix
> ../build-aux/test-driver: line 107:  6238 Abort trap: 6           "$@" > $log_file 2>&1
> FAIL: test-vsprintf-posix
> 
> which debug as...
> 
> $ sudo lldb ./test-linkat
> Password:
> (lldb) target create "./test-linkat"
> Current executable set to './test-linkat' (x86_64).
> (lldb) r
> Process 6515 launched: './test-linkat' (x86_64)
> ./test-link.h:166: assertion 'func (BASE "b", BASE "link/") == -1' failed

Note as mentioned before I'm going by the assertion message
as the debugger line seems to be incorrect.
Anyway it seems we'll need to augment the LINKAT_TRAILING_SLASH_BUG
test in m4/linkat.m4 as per above.

> $ sudo lldb ./test-readlinkat
> (lldb) target create "./test-readlinkat"
> Current executable set to './test-readlinkat' (x86_64).
> (lldb) r
> Process 6538 launched: './test-readlinkat' (x86_64)
> ./test-readlink.h:71: assertion 'func (BASE "link2/", buf, sizeof buf) == -1' failed

Seems like we'll have to add much the same trailing "/" test
to m4/readlinkat.m4 like we've already done for m4/readlink.m4

I'm travelling at present so patches will be tardy.

thanks for the testing so far,
Pádraig.