Commit 199b17cc authored by Hiroshi Ioka's avatar Hiroshi Ioka Committed by Alex Brainman

path/filepath: handle "C:." correctly in EvalSymlinks on Windows

Fixes #16886

Change-Id: Idfacb0cf44d9994559c8e09032b4595887e76433
Reviewed-on: https://go-review.googlesource.com/28214Reviewed-by: default avatarAlex Brainman <alex.brainman@gmail.com>
Run-TryBot: Alex Brainman <alex.brainman@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent 1a04b4ab
...@@ -877,6 +877,40 @@ func TestEvalSymlinks(t *testing.T) { ...@@ -877,6 +877,40 @@ func TestEvalSymlinks(t *testing.T) {
t.Errorf(`EvalSymlinks(".") in %q directory returns %q, want "." or %q`, d.path, p, want) t.Errorf(`EvalSymlinks(".") in %q directory returns %q, want "." or %q`, d.path, p, want)
}() }()
// test EvalSymlinks("C:.") on Windows
if runtime.GOOS == "windows" {
func() {
defer func() {
err := os.Chdir(wd)
if err != nil {
t.Fatal(err)
}
}()
err := os.Chdir(path)
if err != nil {
t.Error(err)
return
}
volDot := filepath.VolumeName(tmpDir) + "."
p, err := filepath.EvalSymlinks(volDot)
if err != nil {
t.Errorf(`EvalSymlinks("%s") in %q directory error: %v`, volDot, d.path, err)
return
}
if p == volDot {
return
}
want := filepath.Clean(findEvalSymlinksTestDirsDest(t, testdirs, d.path))
if p == want {
return
}
t.Errorf(`EvalSymlinks("%s") in %q directory returns %q, want %q or %q`, volDot, d.path, p, volDot, want)
}()
}
// test EvalSymlinks(".."+path) // test EvalSymlinks(".."+path)
func() { func() {
defer func() { defer func() {
......
...@@ -105,8 +105,9 @@ func walkSymlinks(path string) (string, error) { ...@@ -105,8 +105,9 @@ func walkSymlinks(path string) (string, error) {
// directory is a symlink. Stop the walk, if symlink // directory is a symlink. Stop the walk, if symlink
// target is not absolute path, and return "." // target is not absolute path, and return "."
// to the caller (just like unix does). // to the caller (just like unix does).
if path == "." && !IsAbs(newpath) { // Same for "C:.".
return ".", nil if path[volumeNameLen(path):] == "." && !IsAbs(newpath) {
return path, nil
} }
} }
if i == linksWalked { if i == linksWalked {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment