diff options
author | H.Merijn Brand <h.m.brand@xs4all.nl> | 2017-05-11 16:47:45 +0200 |
---|---|---|
committer | Sawyer X <xsawyerx@cpan.org> | 2017-06-01 10:53:32 +0200 |
commit | c6709bf9918ed61b4a7a0ad24887085bdf1732c9 (patch) | |
tree | a0ef96cd51c62afc61409e4304d3840bd2256bdc /reentr.h | |
parent | 0a31ee11c8f69d509334d0813d833cddacf9dacb (diff) | |
download | perl-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.h | 5 |
1 files changed, 5 insertions, 0 deletions
@@ -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 |