]> Cypherpunks repositories - gostls13.git/commitdiff
os: don't include DirFS argument in DirFS errors
authorIan Lance Taylor <iant@golang.org>
Fri, 28 Oct 2022 00:29:51 +0000 (17:29 -0700)
committerGopher Robot <gobot@golang.org>
Fri, 28 Oct 2022 19:25:47 +0000 (19:25 +0000)
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>

src/os/file.go
src/os/os_test.go

index e8d2de1b3cb5cf92ace4039922f3d8a98d92bb37..c46c9030b91b2195567f6f002a6bd92a08121aaa 100644 (file)
@@ -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
index 550b7db5a3327e4c8f5026ff23950fa4d48b7824..52fac4f63c452ab3282bb2945ee655d39c925758 100644 (file)
@@ -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.