[12] (AIX) 8207744: Clean up inconsistent use of opendir/closedir versus opendir64/closedir64

B. Blaser bsrbnd at gmail.com
Fri Aug 10 13:20:36 UTC 2018


Hi Brian,

Among the files you suggest to fix, only the following ones are still
using 'readdir64' for other systems than AIX:

http://cr.openjdk.java.net/~bpb/8207744/webrev.03/src/java.base/unix/native/libjava/UnixFileSystem_md.c.frames.html
http://cr.openjdk.java.net/~bpb/8207744/webrev.03/src/java.base/unix/native/libnio/fs/UnixNativeDispatcher.c.frames.html

I think you could also use 'readdir' and remove lines like the
following ones in both files:

  67 #if defined(_ALLBSD_SOURCE)
  68   #define dirent64 dirent
  69   #define readdir64 readdir
  70   #define stat64 stat

The following file is the only one that uses 'readdir64' on BSD which
is suspect:

http://cr.openjdk.java.net/~bpb/8207744/webrev.03/src/jdk.management/unix/native/libmanagement_ext/OperatingSystemImpl.c.frames.html

I guess you could simply remove the following lines:

  77 #if defined(_ALLBSD_SOURCE)
  78   #define DIR DIR64
  79   #define dirent dirent64
  80   #define opendir opendir64
  81   #define closedir closedir64
  82   #define readdir readdir64
  83 #endif

In the following file:

http://cr.openjdk.java.net/~bpb/8207744/webrev.03/src/java.base/unix/native/libjava/TimeZone_md.c.frames.html

... 'readdir' seems not to be used on AIX, see:

  81 #if defined(__linux__) || defined(MACOSX) || defined(__solaris__)

So, some lines following '53 #if defined(_AIX) ...' are probably not necessary.

Finally, referring to [1], I note that 'readdir64' is only necessary
on Linux to access large file systems using 32-bit architectures:

"To support large filesystems on 32-bit machines there are LFS
variants of the last two functions."
[...]

So, removing it is OK if this feature isn't required by the JDK.

Cheers,
Bernard

[1] https://www.gnu.org/software/libc/manual/html_node/Reading_002fClosing-Directory.html


On 9 August 2018 at 22:56, Brian Burkhalter <brian.burkhalter at oracle.com> wrote:
> Hello,
>
> The latest build + test runs with the .03 revision of this patch check out on AIX, Linux-x64, macOS, Solaris-sparc, and Windows-x64.
>
> If there is a Reviewer available who approves of these changes then please do so.
>
> Thanks,
>
> Brian
>
> On Aug 7, 2018, at 3:41 PM, Brian Burkhalter <brian.burkhalter at oracle.com> wrote:
>
>> Hi Matthias,
>>
>> Yes, that was intentional. From the documentation it looks as if the Linux / Solaris *64 functions in question are now legacy so I changed them for hopefully better consistency. I did not see any problems in building or testing with these changes. If someone knows these changes to be incorrect then I would appreciate being so informed.
>>
>> Does this latest (.03) patch check out on AIX?
>>
>> Thanks,
>>
>> Brian
>>
>> On Aug 7, 2018, at 3:12 AM, Baesken, Matthias <matthias.baesken at sap.com> wrote:
>>
>>> small remark from my side ,  looks like you changed in
>>>
>>> src/java.base/unix/native/libjava/TimeZone_md.c
>>>
>>> src/java.base/unix/native/libjava/childproc.c
>>>
>>> and
>>>
>>> src/jdk.management/unix/native/libmanagement_ext/OperatingSystemImpl.c
>>>
>>> at some places  dirent64  /  readdir64   to   dirent  /  readdir
>>> in the linux/solaris  coding.
>>>
>>> for example
>>>
>>> TimeZone_md.c
>>>
>>> 122 static char *
>>> 123 findZoneinfoFile(char *buf, size_t size, const char *dir)
>>> 124 {
>>> 125     DIR *dirp = NULL;
>>> 126     struct stat statbuf;
>>> 127     struct dirent *dp = NULL;.
>>>
>>>
>>> Was it intended  to  change for linux/solaris ?
>>
>


More information about the core-libs-dev mailing list