RFR: 8338851: Hoist os::Posix::realpath() to os::realpath() and implement on Windows [v2]

Simon Tooke stooke at openjdk.org
Wed Sep 4 20:10:54 UTC 2024


On Thu, 29 Aug 2024 05:45:35 GMT, David Holmes <dholmes at openjdk.org> wrote:

>> Simon Tooke has updated the pull request incrementally with two additional commits since the last revision:
>> 
>>  - simplify windwos realpath() implementation
>>  - get rid of os::posix::realpath() and os::win32::realpath()
>
> This is okay in principle but a few changes can be made.
> 
> Also it seems that none of the callers of `realpath` ever check `errno` so I think that can be removed.
> 
> Thanks

Hello, @dholmes-ora , and thank you for your review!  I am in the process of attempting to address your concerns.  Your review has resulted in simpler code for my implementation - so thanks for that too.  Please let me know if you have more concerns or questions.

> src/hotspot/os/windows/os_windows.cpp line 5344:
> 
>> 5342:     // In this case, use the user provided buffer but at least check whether _fullpath caused
>> 5343:     // a memory overwrite.
>> 5344:     if (errno == EINVAL) {
> 
> There is nothing to indicate that `_fullpath` can ever set `EINVAL` it is only specified to return null on error. This code should not check errno but can just re-try with the user-supplied buffer.

According to [the documentation](https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/fullpath-wfullpath?view=msvc-170), EINVAL can be set in some circumstances.  Those circumstances are checked earlier in the function, so I have simplified this code.

Setting EINVAL (or ENAMETOOLONG) is part of the existing documentation for os::realpath(); I am loathe to change it.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/20683#issuecomment-2329878249
PR Review Comment: https://git.openjdk.org/jdk/pull/20683#discussion_r1744350217


More information about the serviceability-dev mailing list