• Russ Cox's avatar
    os: do not return Lstat errors from Readdir · ef805fe3
    Russ Cox authored
    This CL restores the Go 1.1.2 semantics for os.File's Readdir method.
    
    The code in Go 1.1.2 was rewritten mainly because it looked buggy.
    This new version attempts to be clearer but still provide the 1.1.2 results.
    
    The important diff is not this CL's version against tip but this CL's version
    against Go 1.1.2.
    
    Go 1.1.2:
    
            names, err := f.Readdirnames(n)
            fi = make([]FileInfo, len(names))
            for i, filename := range names {
                    fip, err := Lstat(dirname + filename)
                    if err == nil {
                            fi[i] = fip
                    } else {
                            fi[i] = &fileStat{name: filename}
                    }
            }
            return fi, err
    
    This CL:
    
            names, err := f.Readdirnames(n)
            fi = make([]FileInfo, len(names))
            for i, filename := range names {
                    fip, lerr := lstat(dirname + filename)
                    if lerr != nil {
                            fi[i] = &fileStat{name: filename}
                            continue
                    }
                    fi[i] = fip
            }
            return fi, err
    
    The changes from Go 1.1.2 are stylistic, not semantic:
    1. Use lstat instead of Lstat, for testing (done before this CL).
    2. Make error handling in loop body look more like an error case.
    3. Use separate error variable name in loop body, to be clear
       we are not trying to influence the final return result.
    
    Fixes #6656.
    Fixes #6680.
    
    R=golang-dev, bradfitz
    CC=golang-dev
    https://golang.org/cl/18870043
    ef805fe3
os_unix_test.go 2.95 KB