# HG changeset patch # User Petr Salinger # Date 1197894609 -3600 # Node ID fdfe023323f54099f3ac6d2c13735518ad2dd5f5 # Parent 36c5c80244763088b1aa3b924308f8ed32ebba06 getcwd.c: Use a more readable witness: HAVE_OPENAT_SUPPORT * lib/getcwd.c: Define and use HAVE_OPENAT_SUPPORT, in place of AT_FDCWD. diff --git a/ChangeLog b/ChangeLog --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2007-12-17 Petr Salinger + + getcwd.c: Use a more readable witness: HAVE_OPENAT_SUPPORT + * lib/getcwd.c: Define and use HAVE_OPENAT_SUPPORT, in place of AT_FDCWD. + 2007-12-17 Jim Meyering Port to GNU/kFreeBSD - FreeBSD kernel + GNU libc, diff --git a/lib/getcwd.c b/lib/getcwd.c --- a/lib/getcwd.c +++ b/lib/getcwd.c @@ -29,9 +29,12 @@ #include /* For AT_FDCWD on Solaris 9. */ -/* On a system without the openat function, undefine AT_FDCWD. */ -#if ! HAVE_OPENAT -# undef AT_FDCWD +/* If this host provides the openat function, then enable + code below to make getcwd more efficient and robust. */ +#ifdef HAVE_OPENAT +# define HAVE_OPENAT_SUPPORT 1 +#else +# define HAVE_OPENAT_SUPPORT 0 #endif #ifndef __set_errno @@ -127,7 +130,7 @@ DEEP_NESTING = 100 }; -#ifdef AT_FDCWD +#if HAVE_OPENAT_SUPPORT int fd = AT_FDCWD; bool fd_needs_closing = false; #else @@ -208,7 +211,7 @@ bool use_d_ino = true; /* Look at the parent directory. */ -#ifdef AT_FDCWD +#if HAVE_OPENAT_SUPPORT fd = openat (fd, "..", O_RDONLY); if (fd < 0) goto lose; @@ -235,7 +238,7 @@ mount_point = dotdev != thisdev; /* Search for the last directory. */ -#ifdef AT_FDCWD +#if HAVE_OPENAT_SUPPORT dirstream = fdopendir (fd); if (dirstream == NULL) goto lose; @@ -291,7 +294,7 @@ { int entry_status; -#ifdef AT_FDCWD +#if HAVE_OPENAT_SUPPORT entry_status = fstatat (fd, d->d_name, &st, AT_SYMLINK_NOFOLLOW); #else /* Compute size needed for this file name, or for the file @@ -387,7 +390,7 @@ if (dirp == &dir[allocated - 1]) *--dirp = '/'; -#ifndef AT_FDCWD +#if ! HAVE_OPENAT_SUPPORT if (dotlist != dots) free (dotlist); #endif @@ -413,7 +416,7 @@ int save = errno; if (dirstream) __closedir (dirstream); -#ifdef AT_FDCWD +#if HAVE_OPENAT_SUPPORT if (fd_needs_closing) close (fd); #else