8179887: Build failure with glibc >= 2.24: error: 'int readdir_r(DIR*, dirent*, dirent**)' is deprecated
authorkbarrett
Wed, 02 May 2018 19:24:52 -0400
changeset 49957 746229cc1ab0
parent 49956 a87f2e7a527c
child 49958 cc29d7717e3a
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 <mvala@redhat.com>
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) {