# HG changeset patch # User kbarrett # Date 1525303492 14400 # Node ID 746229cc1ab014927edbed6984bf8ac3f635aa31 # Parent a87f2e7a527c74e9780dc26e1910bb0b0403dc91 8179887: Build failure with glibc >= 2.24: error: 'int readdir_r(DIR*, dirent*, dirent**)' is deprecated Summary: Use readir rather than readdir_r on Linux. Reviewed-by: kbarrett, stuefe, andrew Contributed-by: Michal Vala diff -r a87f2e7a527c -r 746229cc1ab0 src/hotspot/os/linux/os_linux.inline.hpp --- a/src/hotspot/os/linux/os_linux.inline.hpp Wed May 02 16:47:40 2018 -0400 +++ b/src/hotspot/os/linux/os_linux.inline.hpp Wed May 02 19:24:52 2018 -0400 @@ -98,26 +98,8 @@ 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) {