Petr Salinger <[EMAIL PROTECTED]> wrote: > getcwd.c uses *at() function family iff AT_FDCWD is defined. > This approach does not work on GNU/kFreeBSD - FreeBSD kernel + GNU libc. > The kernel does not provide needed interfaces, and therefore glibc > provides only stub version for function from *at() family. > But the AT_FDCWD is declared and getwdc.c uses only native i.e. openat(). > > Please, could you change detection whether really use *at() function > family in getcwd.
Here's an untested patch. Please test it. Port to GNU/kFreeBSD - FreeBSD kernel + GNU libc, which has no openat syscall, yet <fcntl.h> does define AT_FDCWD. * lib/getcwd.c: Undef AT_FDCWD if there is no openat function. * modules/getcwd (Depends-on): Add openat. Reported by Petr Salinger. diff --git a/lib/getcwd.c b/lib/getcwd.c index b8e9989..98df8bf 100644 --- a/lib/getcwd.c +++ b/lib/getcwd.c @@ -29,6 +29,11 @@ #include <fcntl.h> /* For AT_FDCWD on Solaris 9. */ +/* On a system without the openat function, undefine AT_FDCWD. */ +#if ! HAVE_OPENAT +# undef AT_FDCWD +#endif + #ifndef __set_errno # define __set_errno(val) (errno = (val)) #endif diff --git a/modules/getcwd b/modules/getcwd index 17687e7..46ecb03 100644 --- a/modules/getcwd +++ b/modules/getcwd @@ -12,6 +12,7 @@ mempcpy d-ino dirfd extensions +openat stdbool unistd malloc-posix