summaryrefslogtreecommitdiff
path: root/reentr.h
diff options
context:
space:
mode:
authorH.Merijn Brand <h.m.brand@xs4all.nl>2017-05-11 16:47:45 +0200
committerSawyer X <xsawyerx@cpan.org>2017-06-01 10:53:32 +0200
commitc6709bf9918ed61b4a7a0ad24887085bdf1732c9 (patch)
treea0ef96cd51c62afc61409e4304d3840bd2256bdc /reentr.h
parent0a31ee11c8f69d509334d0813d833cddacf9dacb (diff)
downloadperl-c6709bf9918ed61b4a7a0ad24887085bdf1732c9.tar.gz
Disable readdir_r and readdir64_r on glibc >= 2.24
DESCRIPTION This function is deprecated; use readdir(3) instead. The readdir_r() function was invented as a reentrant version of read- dir(3). It reads the next directory entry from the directory stream dirp, and returns it in the caller-allocated buffer pointed to by entry. For details of the dirent structure, see readdir(3). A pointer to the returned buffer is placed in *result; if the end of the directory stream was encountered, then NULL is instead returned in *result. It is recommended that applications use readdir(3) instead of read- dir_r(). Furthermore, since version 2.24, glibc deprecates read- dir_r(). The reasons are as follows: * On systems where NAME_MAX is undefined, calling readdir_r() may be unsafe because the interface does not allow the caller to specify the length of the buffer used for the returned directory entry. * On some systems, readdir_r() can't read directory entries with very long names. When the glibc implementation encounters such a name, readdir_r() fails with the error ENAMETOOLONG after the final direc- tory entry has been read. On some other systems, readdir_r() may return a success status, but the returned d_name field may not be null terminated or may be truncated. * In the current POSIX.1 specification (POSIX.1-2008), readdir(3) is not required to be thread-safe. However, in modern implementations (including the glibc implementation), concurrent calls to readdir(3) that specify different directory streams are thread-safe. There- fore, the use of readdir_r() is generally unnecessary in multi- threaded programs. In cases where multiple threads must read from the same directory stream, using readdir(3) with external synchro- nization is still preferable to the use of readdir_r(), for the rea- sons given in the points above. * It is expected that a future version of POSIX.1 will make read- dir_r() obsolete, and require that readdir(3) be thread-safe when concurrently employed on different directory streams.
Diffstat (limited to 'reentr.h')
-rw-r--r--reentr.h5
1 files changed, 5 insertions, 0 deletions
diff --git a/reentr.h b/reentr.h
index c268851922..b1f3c80615 100644
--- a/reentr.h
+++ b/reentr.h
@@ -56,6 +56,11 @@
# define NETDB_R_OBSOLETE
#endif
+#if defined(__GLIBC__) && (__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 24))
+# undef HAS_READDIR_R
+# undef HAS_READDIR64_R
+#endif
+
/*
* As of OpenBSD 3.7, reentrant functions are now working, they just are
* incompatible with everyone else. To make OpenBSD happy, we have to