• Damien Neil's avatar
    os: don't consult Is methods on non-syscall error types · d178c588
    Damien Neil authored
    CL #163058 moves interpretation of platform-specific errors to the
    syscall package. Package syscall errors implement an Is method which
    os.IsPermission etc. consult. This results in an unintended semantic
    change to the os package predicate functions: The following program
    now prints 'true' where it used to print 'false':
    
    	package main
    	import "os"
    	type myError struct{ error }
    	func (e myError) Is(target error) bool { return target == os.ErrPermission }
    	func main() { println(os.IsPermission(myError{})) }
    
    Change the os package error predicate functions to only examine syscall
    errors, avoiding this semantic change.
    
    This CL does retain one minor semantic change: On Plan9, os.IsPermission
    used to return true for any error with text containing the string
    "permission denied". It now only returns true for a syscall.ErrorString
    containing that text.
    
    Change-Id: I6b512b1de6ced46c2f1cc8d264fa2495ae7bf9f5
    Reviewed-on: https://go-review.googlesource.com/c/go/+/188817
    Run-TryBot: Ian Lance Taylor <iant@golang.org>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
    Reviewed-by: default avatarRuss Cox <rsc@golang.org>
    d178c588
error_plan9.go 234 Bytes