]> Cypherpunks repositories - gostls13.git/commitdiff
os: try openFile before openDir in windows os.OpenFile
authorPatrick Mézard <patrick@mezard.eu>
Wed, 5 Mar 2014 01:19:56 +0000 (12:19 +1100)
committerAlex Brainman <alex.brainman@gmail.com>
Wed, 5 Mar 2014 01:19:56 +0000 (12:19 +1100)
Logging calls when running "go install -a std" turns:

  547  openDir succeeded
  3593 openDir failed and fell back to openFile
  3592 openFile succeeded
  1    both failed

into:

  3592 openFile succeeded
  548  openFile failed and fell back
  547  openDir succeeded
  1    both failed

Here the change trades 3593 failed openDir for 548 failed openFile.

Fix issue 7426.

LGTM=alex.brainman
R=golang-codereviews, alex.brainman, bradfitz
CC=golang-codereviews
https://golang.org/cl/70480044

src/pkg/os/file_windows.go

index fab7de34282504bfe367d20024c6d9e8f95a10f9..efe8bc03fc40962fd4c768425c97a5af5905792d 100644 (file)
@@ -134,20 +134,19 @@ func OpenFile(name string, flag int, perm FileMode) (file *File, err error) {
        if name == "" {
                return nil, &PathError{"open", name, syscall.ENOENT}
        }
-       // TODO(brainman): not sure about my logic of assuming it is dir first, then fall back to file
-       r, e := openDir(name)
-       if e == nil {
+       r, errf := openFile(name, flag, perm)
+       if errf == nil {
+               return r, nil
+       }
+       r, errd := openDir(name)
+       if errd == nil {
                if flag&O_WRONLY != 0 || flag&O_RDWR != 0 {
                        r.Close()
                        return nil, &PathError{"open", name, syscall.EISDIR}
                }
                return r, nil
        }
-       r, e = openFile(name, flag, perm)
-       if e == nil {
-               return r, nil
-       }
-       return nil, &PathError{"open", name, e}
+       return nil, &PathError{"open", name, errf}
 }
 
 // Close closes the File, rendering it unusable for I/O.