Jim Meyering wrote: > Pádraig Brady wrote: > >> Jim Meyering wrote: >>> Eric Blake wrote: >>>> According to Pádraig Brady on 10/5/2009 3:53 PM: >>>>>>>> This is a new test, but FC5 is soooo old, >>>>>>>> that I'm not sure it's worth worrying about. >>>>>>> March 2006? >>>>>> The failure is probably a function of the kernel. >>>>>> Which is it? >>>>> In summary this is what fails: >>>>> >>>>> $ touch a >>>>> $ ln -s a symlink >>>>> $ ln -L symlink hardlink >>>>> ln: creating hard link `hardlink' => `symlink': Invalid argument >>>>> >>>>> `man linkat` says that AT_SYMLINK_FOLLOW is only supported since 2.6.18 >>>>> and my FC5 system is 2.6.17 >>>> This should fix it. I don't have access to FC5, but I tested the new code >>>> path by priming the cache (gl_cv_func_linkat_follow=runtime ./configure) >>>> along with a temporary setting of have_follow_really=-1 in linkat.c. I >>>> also verified that the replacement is not picked up on cygwin 1.7, where >>>> AT_SYMLINK_FOLLOW was implemented at the same time as linkat. >>>> >>>> The patch copies from areadlink.c, as well as link_follow earlier in >>>> linkat.c, to create two new fd-relative helpers. For now, I didn't see >>>> any reason to expose them, but areadlinkat may someday be worth making >>>> into a full-blown module. >>> Wow, that was quick. Thanks. >>> I should have read this first. >>> >>> I was just reviewing the changes in gnulib and >>> see a few that should be included in the imminent coreutils >>> beta release, so will probably take this one, too. >> Needs a couple of tweaks.. >> >> This needs to be added to linkat.c >> (seems like it should be refactored somewhere?) >> >> #ifndef SIZE_MAX >> # define SIZE_MAX ((size_t) -1) >> #endif >> #ifndef SSIZE_MAX >> # define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2)) >> #endif > > This should do it: > >>From 6f6420cc9705dcfa545a28c674fddf5703e72c86 Mon Sep 17 00:00:00 2001 > From: Jim Meyering <meyer...@redhat.com> > Date: Tue, 6 Oct 2009 11:11:39 +0200 > Subject: [PATCH] linkat: avoid compilation failure > > * lib/linkat.c: Include <stdint.h> for use of SIZE_MAX.
That works thanks. I suppose these should include stdint.h also? areadlink.c:# define SIZE_MAX ((size_t) -1) areadlink-with-size.c:# define SIZE_MAX ((size_t) -1) backupfile.c:# define SIZE_MAX ((size_t) -1) fnmatch.c:# define SIZE_MAX ((size_t) -1) quotearg.c:# define SIZE_MAX ((size_t) -1) striconv.c:# define SIZE_MAX ((size_t) -1) While these already include stdint.h so should probably not redefine fts.c:# define SIZE_MAX ((size_t) -1) getdelim.c:# define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2)) getndelim2.c:# define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2)) cheers, Pádraig.