diff --git a/src/os/file_windows.go b/src/os/file_windows.go index 223698c130..7ed4fe2f38 100644 --- a/src/os/file_windows.go +++ b/src/os/file_windows.go @@ -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)) diff --git a/src/os/stat_test.go b/src/os/stat_test.go index d59edeb547..da20a4fdbf 100644 --- a/src/os/stat_test.go +++ b/src/os/stat_test.go @@ -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