> On 03/01/16 11:27, James Youngman wrote:
>> On Sat, Jan 2, 2016 at 1:51 PM, Pádraig Brady <address@hidden> wrote:
>>> On 02/01/16 13:38, Andreas Metzler wrote:
>>>> Hello,
>>>>
>>>> when trying to build GNU findutils on GNU/hurd multiple gnulib
>>>> testsuite errors have come up:
>>>>
>>>> (sid_hurd-i386-dchroot)address@hidden:~/FIND/findutils-4.6.0/tests$ 
>>>> ./test-facc
>>>> essat
>>>> test-faccessat.c:36: assertion 'errno == EBADF' failed
>>>> Aborted
>>>
>>> Don't know about the above.
>> 
>> Shouldn't we allow ENOTSUP too, when GNULIB_SUPPORT_ONLY_AT_FDCWD is
>> #defined?    Here's the code:
>> 
>> AT_FUNC_NAME (int fd, char const *file AT_FUNC_POST_FILE_PARAM_DECLS)
>> {
>>   VALIDATE_FLAG (flag);
>> 
>>   if (fd == AT_FDCWD || IS_ABSOLUTE_FILE_NAME (file))
>>     return CALL_FUNC (file);
>> 
>> #ifdef GNULIB_SUPPORT_ONLY_AT_FDCWD
>>   errno = ENOTSUP;
>>   return FUNC_FAIL;
>> #else
>>   {
>> ...
>> 
> 
> While that's logically correct I think,
> I don't think it's the issue as findutils
> doesn't define GNULIB_SUPPORT_ONLY_AT_FDCWD
> (emacs doesn't even use that define anymore).
> 
> thanks,
> Pádraig

The faccessat() routine being used does not come from findutils' copy of
gnulib but from glibc. The glibc implementation starts with

http://sources.debian.net/src/glibc/2.22-7/sysdeps/mach/hurd/faccessat.c/#L27

int
faccessat (fd, file, type, flag)
     int fd;
     const char *file;
     int type;
     int flag;
{
  error_t err;
  file_t port;
  int allowed, flags;

  if ((flag & AT_EACCESS) == 0)
    {
      if (fd == AT_FDCWD || file[0] == '/')
        return __access (file, type);
      __set_errno (ENOTSUP);    /* XXX later */
      return -1;
    }
[...]

So for the test doing

    ASSERT (faccessat (-1, "foo", F_OK, 0) == -1);
    ASSERT (errno == EBADF);

we get an errno of ENOTSUP


Andreas

Reply via email to