]> Cypherpunks repositories - gostls13.git/commit
os: make Lstat for symlinks on Windows consistent with POSIX
authorBryan C. Mills <bcmills@google.com>
Tue, 24 Jan 2023 14:05:36 +0000 (09:05 -0500)
committerGopher Robot <gobot@golang.org>
Wed, 25 Jan 2023 16:38:21 +0000 (16:38 +0000)
commit1d3088effdcb03612dd03eb24feee4aa92070a63
tree999263a5f8baacb8de82797a9504115384315849
parent7a5460ed9b53ac99805e6578cc67da8ef431c577
os: make Lstat for symlinks on Windows consistent with POSIX

This also makes path/filepath.Walk more consistent between
Windows and POSIX platforms.

According to
https://pubs.opengroup.org/onlinepubs/9699919799.2013edition/basedefs/V1_chap04.html#tag_04_12
symlinks in a path that includes a trailing slash must be resolved
before a function acts on that path.

POSIX defines an lstat function, whereas the Win32 API does not, so
Go's os.Lstat should follow the (defined) POSIX semantics instead of
doing something arbitrarily different.

CL 134195 added a test for the correct POSIX behavior when os.Lstat is
called on a symlink. However, the test turned out to be broken on Windows,
and when it was fixed (in CL 143578) it was fixed with different Lstat
behavior on Windows than on all other platforms that support symlinks.

In #50807 we are attempting to provide consistent symlink behavior for
cmd/go. This unnecessary platform difference, if left uncorrected,
will make that fix much more difficult.

CL 460595 reworked the implementation of Stat and Lstat on Windows,
and with the new implementation this fix is straightforward.

For #50807.
Updates #27225.

Change-Id: Ia28821aa4aab6cefa021da2d9b803506cdb2621b
Reviewed-on: https://go-review.googlesource.com/c/go/+/463177
Reviewed-by: Quim Muntal <quimmuntal@gmail.com>
Auto-Submit: Bryan Mills <bcmills@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Alex Brainman <alex.brainman@gmail.com>
Reviewed-by: Russ Cox <rsc@golang.org>
Run-TryBot: Bryan Mills <bcmills@google.com>
src/cmd/go/testdata/script/list_goroot_symlink.txt
src/os/stat_test.go
src/os/stat_windows.go
src/path/filepath/path_test.go