mirror of
https://github.com/golang/go
synced 2024-11-19 22:04:44 -07:00
path/filepath: convert drive letter to upper case in windows EvalSymlinks
Fixes #3347. R=golang-dev, aram, r, rsc CC=golang-dev https://golang.org/cl/5918043
This commit is contained in:
parent
9031f952e2
commit
cf13bd3fab
@ -846,3 +846,26 @@ func TestVolumeName(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDriveLetterInEvalSymlinks(t *testing.T) {
|
||||||
|
if runtime.GOOS != "windows" {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
wd, _ := os.Getwd()
|
||||||
|
if len(wd) < 3 {
|
||||||
|
t.Errorf("Current directory path %q is too short", wd)
|
||||||
|
}
|
||||||
|
lp := strings.ToLower(wd)
|
||||||
|
up := strings.ToUpper(wd)
|
||||||
|
flp, err := filepath.EvalSymlinks(lp)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("EvalSymlinks(%q) failed: %q", lp, err)
|
||||||
|
}
|
||||||
|
fup, err := filepath.EvalSymlinks(up)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("EvalSymlinks(%q) failed: %q", up, err)
|
||||||
|
}
|
||||||
|
if flp != fup {
|
||||||
|
t.Errorf("Results of EvalSymlinks do not match: %q and %q", flp, fup)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -23,5 +23,13 @@ func evalSymlinks(path string) (string, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
b = b[:n]
|
b = b[:n]
|
||||||
return Clean(syscall.UTF16ToString(b)), nil
|
s := syscall.UTF16ToString(b)
|
||||||
|
// syscall.GetLongPathName does not change the case of the drive letter,
|
||||||
|
// but the result of EvalSymlinks must be unique, so we have
|
||||||
|
// EvalSymlinks(`c:\a`) == EvalSymlinks(`C:\a`).
|
||||||
|
// Make drive letter upper case. This matches what os.Getwd returns.
|
||||||
|
if len(s) >= 2 && s[1] == ':' && 'a' <= s[0] && s[0] <= 'z' {
|
||||||
|
s = string(s[0]+'A'-'a') + s[1:]
|
||||||
|
}
|
||||||
|
return Clean(s), nil
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user