projects
/
gnulib.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Enable the fpucw handling also for x86_64.
[gnulib.git]
/
lib
/
getcwd.c
diff --git
a/lib/getcwd.c
b/lib/getcwd.c
index
b8e9989
..
2397c08
100644
(file)
--- a/
lib/getcwd.c
+++ b/
lib/getcwd.c
@@
-29,6
+29,14
@@
#include <fcntl.h> /* For AT_FDCWD on Solaris 9. */
#include <fcntl.h> /* For AT_FDCWD on Solaris 9. */
+/* 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
# define __set_errno(val) (errno = (val))
#endif
#ifndef __set_errno
# define __set_errno(val) (errno = (val))
#endif
@@
-122,7
+130,7
@@
__getcwd (char *buf, size_t size)
DEEP_NESTING = 100
};
DEEP_NESTING = 100
};
-#if
def AT_FDCWD
+#if
HAVE_OPENAT_SUPPORT
int fd = AT_FDCWD;
bool fd_needs_closing = false;
#else
int fd = AT_FDCWD;
bool fd_needs_closing = false;
#else
@@
-203,7
+211,7
@@
__getcwd (char *buf, size_t size)
bool use_d_ino = true;
/* Look at the parent directory. */
bool use_d_ino = true;
/* Look at the parent directory. */
-#if
def AT_FDCWD
+#if
HAVE_OPENAT_SUPPORT
fd = openat (fd, "..", O_RDONLY);
if (fd < 0)
goto lose;
fd = openat (fd, "..", O_RDONLY);
if (fd < 0)
goto lose;
@@
-230,7
+238,7
@@
__getcwd (char *buf, size_t size)
mount_point = dotdev != thisdev;
/* Search for the last directory. */
mount_point = dotdev != thisdev;
/* Search for the last directory. */
-#if
def AT_FDCWD
+#if
HAVE_OPENAT_SUPPORT
dirstream = fdopendir (fd);
if (dirstream == NULL)
goto lose;
dirstream = fdopendir (fd);
if (dirstream == NULL)
goto lose;
@@
-286,7
+294,7
@@
__getcwd (char *buf, size_t size)
{
int entry_status;
{
int entry_status;
-#if
def 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
entry_status = fstatat (fd, d->d_name, &st, AT_SYMLINK_NOFOLLOW);
#else
/* Compute size needed for this file name, or for the file
@@
-382,7
+390,7
@@
__getcwd (char *buf, size_t size)
if (dirp == &dir[allocated - 1])
*--dirp = '/';
if (dirp == &dir[allocated - 1])
*--dirp = '/';
-#if
ndef AT_FDCWD
+#if
! HAVE_OPENAT_SUPPORT
if (dotlist != dots)
free (dotlist);
#endif
if (dotlist != dots)
free (dotlist);
#endif
@@
-408,7
+416,7
@@
__getcwd (char *buf, size_t size)
int save = errno;
if (dirstream)
__closedir (dirstream);
int save = errno;
if (dirstream)
__closedir (dirstream);
-#if
def AT_FDCWD
+#if
HAVE_OPENAT_SUPPORT
if (fd_needs_closing)
close (fd);
#else
if (fd_needs_closing)
close (fd);
#else