mirror of
https://github.com/golang/go
synced 2024-11-17 15:54:39 -07:00
os: don't include DirFS argument in DirFS errors
Otherwise we wind up mixing GOOS paths with slash separated paths. Change-Id: I63dd733cbdb0668effbc030cfd58945008732d9e Reviewed-on: https://go-review.googlesource.com/c/go/+/446115 Reviewed-by: Ian Lance Taylor <iant@google.com> Run-TryBot: Ian Lance Taylor <iant@google.com> Reviewed-by: Heschi Kreinick <heschi@google.com> Reviewed-by: Bryan Mills <bcmills@google.com> Run-TryBot: Bryan Mills <bcmills@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Auto-Submit: Ian Lance Taylor <iant@google.com>
This commit is contained in:
parent
e59d873ff9
commit
42f334d677
@ -625,6 +625,7 @@ func DirFS(dir string) fs.FS {
|
||||
return dirFS(dir)
|
||||
}
|
||||
|
||||
// containsAny reports whether any bytes in chars are within s.
|
||||
func containsAny(s, chars string) bool {
|
||||
for i := 0; i < len(s); i++ {
|
||||
for j := 0; j < len(chars); j++ {
|
||||
@ -644,14 +645,12 @@ func (dir dirFS) Open(name string) (fs.File, error) {
|
||||
}
|
||||
f, err := Open(dir.join(name))
|
||||
if err != nil {
|
||||
if runtime.GOOS == "windows" {
|
||||
// Undo the backslash conversion done by dir.join.
|
||||
perr := err.(*PathError)
|
||||
if containsAny(perr.Path, `\`) {
|
||||
perr.Path = string(dir) + "/" + name
|
||||
}
|
||||
}
|
||||
return nil, err // nil fs.File
|
||||
// DirFS takes a string appropriate for GOOS,
|
||||
// while the name argument here is always slash separated.
|
||||
// dir.join will have mixed the two; undo that for
|
||||
// error reporting.
|
||||
err.(*PathError).Path = name
|
||||
return nil, err
|
||||
}
|
||||
return f, nil
|
||||
}
|
||||
@ -662,6 +661,8 @@ func (dir dirFS) Stat(name string) (fs.FileInfo, error) {
|
||||
}
|
||||
f, err := Stat(dir.join(name))
|
||||
if err != nil {
|
||||
// See comment in dirFS.Open.
|
||||
err.(*PathError).Path = name
|
||||
return nil, err
|
||||
}
|
||||
return f, nil
|
||||
|
@ -2717,7 +2717,8 @@ func TestDirFS(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// Test that the error message does not contain a backslash.
|
||||
// Test that the error message does not contain a backslash,
|
||||
// and does not contain the DirFS argument.
|
||||
const nonesuch = "dir/nonesuch"
|
||||
_, err := fs.Open(nonesuch)
|
||||
if err == nil {
|
||||
@ -2726,6 +2727,9 @@ func TestDirFS(t *testing.T) {
|
||||
if !strings.Contains(err.Error(), nonesuch) {
|
||||
t.Errorf("error %q does not contain %q", err, nonesuch)
|
||||
}
|
||||
if strings.Contains(err.Error(), "testdata") {
|
||||
t.Errorf("error %q contains %q", err, "testdata")
|
||||
}
|
||||
}
|
||||
|
||||
// Test that Open does not accept backslash as separator.
|
||||
|
Loading…
Reference in New Issue
Block a user