mirror of https://github.com/golang/go.git
os: use Stat instead of Lstat in Symlink
Windows implementation of Symlink uses CreateSymbolicLink Windows API. The API requires to identify the target type: file or directory. Current Symlink implementation uses Lstat to determine symlink type, but Lstat will not be able to determine correct result if destination is symlink. Replace Lstat call with Stat. Fixes #28432 Change-Id: Ibee6d8ac21e2246bf8d0a019c4c66d38b09887d4 Reviewed-on: https://go-review.googlesource.com/c/145217 Run-TryBot: Alex Brainman <alex.brainman@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
fde4b9ed14
commit
5cc8089948
|
|
@ -362,7 +362,7 @@ func Symlink(oldname, newname string) error {
|
|||
destpath = dirname(newname) + `\` + oldname
|
||||
}
|
||||
|
||||
fi, err := Lstat(destpath)
|
||||
fi, err := Stat(destpath)
|
||||
isdir := err == nil && fi.IsDir()
|
||||
|
||||
n, err := syscall.UTF16PtrFromString(fixLongPath(newname))
|
||||
|
|
|
|||
|
|
@ -205,6 +205,14 @@ func TestDirAndSymlinkStats(t *testing.T) {
|
|||
}
|
||||
testSymlinkStats(t, dirlink, true)
|
||||
testSymlinkSameFile(t, dir, dirlink)
|
||||
|
||||
linklink := filepath.Join(tmpdir, "linklink")
|
||||
err = os.Symlink(dirlink, linklink)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
testSymlinkStats(t, linklink, true)
|
||||
testSymlinkSameFile(t, dir, linklink)
|
||||
}
|
||||
|
||||
func TestFileAndSymlinkStats(t *testing.T) {
|
||||
|
|
@ -230,6 +238,14 @@ func TestFileAndSymlinkStats(t *testing.T) {
|
|||
}
|
||||
testSymlinkStats(t, filelink, false)
|
||||
testSymlinkSameFile(t, file, filelink)
|
||||
|
||||
linklink := filepath.Join(tmpdir, "linklink")
|
||||
err = os.Symlink(filelink, linklink)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
testSymlinkStats(t, linklink, false)
|
||||
testSymlinkSameFile(t, file, linklink)
|
||||
}
|
||||
|
||||
// see issue 27225 for details
|
||||
|
|
|
|||
Loading…
Reference in New Issue