From: Petr Salinger Date: Mon, 17 Dec 2007 12:30:09 +0000 (+0100) Subject: getcwd.c: Use a more readable witness: HAVE_OPENAT_SUPPORT X-Git-Tag: v0.1~7918 X-Git-Url: http://erislabs.net/gitweb/?a=commitdiff_plain;h=a4da9fe973e790bfbf2008d1f50445d22a024efa;p=gnulib.git 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 index a8f8b4c57..e64c84604 100644 --- 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 index 98df8bf99..2397c08c8 100644 --- 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 @@ __getcwd (char *buf, size_t size) DEEP_NESTING = 100 }; -#ifdef AT_FDCWD +#if HAVE_OPENAT_SUPPORT int fd = AT_FDCWD; bool fd_needs_closing = false; #else @@ -208,7 +211,7 @@ __getcwd (char *buf, size_t size) 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 @@ __getcwd (char *buf, size_t size) 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 @@ __getcwd (char *buf, size_t size) { 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 @@ __getcwd (char *buf, size_t size) if (dirp == &dir[allocated - 1]) *--dirp = '/'; -#ifndef AT_FDCWD +#if ! HAVE_OPENAT_SUPPORT if (dotlist != dots) free (dotlist); #endif @@ -413,7 +416,7 @@ __getcwd (char *buf, size_t size) int save = errno; if (dirstream) __closedir (dirstream); -#ifdef AT_FDCWD +#if HAVE_OPENAT_SUPPORT if (fd_needs_closing) close (fd); #else