8179887: Build failure with glibc >= 2.24: error: 'int readdir_r(DIR*, dirent*, dirent**)' is deprecated

Use readir rather than readdir_r on Linux.

Reviewed-by: kbarrett, stuefe, andrew
This commit is contained in:
Michal Vala 2018-05-02 19:24:52 -04:00 committed by Kim Barrett
parent 9a94336b7d
commit c555679d4f

View file

@ -98,26 +98,8 @@ inline int os::ftruncate(int fd, jlong length) {
inline struct dirent* os::readdir(DIR* dirp, dirent *dbuf)
{
// readdir_r has been deprecated since glibc 2.24.
// See https://sourceware.org/bugzilla/show_bug.cgi?id=19056 for more details.
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
dirent* p;
int status;
assert(dirp != NULL, "just checking");
// NOTE: Linux readdir_r (on RH 6.2 and 7.2 at least) is NOT like the POSIX
// version. Here is the doc for this function:
// http://www.gnu.org/manual/glibc-2.2.3/html_node/libc_262.html
if((status = ::readdir_r(dirp, dbuf, &p)) != 0) {
errno = status;
return NULL;
} else
return p;
#pragma GCC diagnostic pop
return ::readdir(dirp);
}
inline int os::closedir(DIR *dirp) {