mirror of
https://github.com/golang/go
synced 2024-11-19 20:54:39 -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]
|
||||
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