]> Cypherpunks repositories - gostls13.git/commitdiff
os: delete code duplications in error files
authorbogem <albertnigma@gmail.com>
Sat, 10 Sep 2016 13:34:07 +0000 (18:34 +0500)
committerIan Lance Taylor <iant@golang.org>
Sat, 10 Sep 2016 17:04:21 +0000 (17:04 +0000)
Change-Id: I1ec2fcf81a7a9e45a2fae8c02c8adabc7841b4fa
Reviewed-on: https://go-review.googlesource.com/29013
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/os/error.go
src/os/error_plan9.go
src/os/error_unix.go
src/os/error_windows.go

index e26ce279706933393e2c21208d783527bb04d609..2612f58bd1bec130f9f18f7611324da731b6e0bd 100644 (file)
@@ -63,3 +63,16 @@ func IsNotExist(err error) bool {
 func IsPermission(err error) bool {
        return isPermission(err)
 }
+
+// underlyingError returns the underlying error for known os error types.
+func underlyingError(err error) error {
+       switch err := err.(type) {
+       case *PathError:
+               return err.Err
+       case *LinkError:
+               return err.Err
+       case *SyscallError:
+               return err.Err
+       }
+       return err
+}
index 2dc6b39c39595b43fe0aa134d5ad6e4c3b92c158..a67343981e22f34296ccfe12adf227fc461e72d8 100644 (file)
@@ -5,46 +5,30 @@
 package os
 
 func isExist(err error) bool {
-       switch pe := err.(type) {
-       case nil:
-               return false
-       case *PathError:
-               err = pe.Err
-       case *LinkError:
-               err = pe.Err
-       case *SyscallError:
-               err = pe.Err
-       }
-       return contains(err.Error(), " exists")
+       return checkErrMessageContent(err, " exists")
 }
 
 func isNotExist(err error) bool {
-       switch pe := err.(type) {
-       case nil:
-               return false
-       case *PathError:
-               err = pe.Err
-       case *LinkError:
-               err = pe.Err
-       case *SyscallError:
-               err = pe.Err
-       }
-       return contains(err.Error(), "does not exist") || contains(err.Error(), "not found") ||
-               contains(err.Error(), "has been removed") || contains(err.Error(), "no parent")
+       return checkErrMessageContent(err, "does not exist", "not found",
+               "has been removed", "no parent")
 }
 
 func isPermission(err error) bool {
-       switch pe := err.(type) {
-       case nil:
+       return checkErrMessageContent(err, "permission denied")
+}
+
+// checkErrMessageContent checks if err message contains one of msgs.
+func checkErrMessageContent(err error, msgs ...string) bool {
+       if err == nil {
                return false
-       case *PathError:
-               err = pe.Err
-       case *LinkError:
-               err = pe.Err
-       case *SyscallError:
-               err = pe.Err
        }
-       return contains(err.Error(), "permission denied")
+       err = underlyingError(err)
+       for _, msg := range msgs {
+               if contains(err.Error(), msg) {
+                       return true
+               }
+       }
+       return false
 }
 
 // contains is a local version of strings.Contains. It knows len(sep) > 1.
index 3c78eb4dd2fd2f8e9f657f639e51e732c41786c1..be1440cacba83854a2c97e849eb4f8c9a9c7205b 100644 (file)
@@ -9,43 +9,16 @@ package os
 import "syscall"
 
 func isExist(err error) bool {
-       switch pe := err.(type) {
-       case nil:
-               return false
-       case *PathError:
-               err = pe.Err
-       case *LinkError:
-               err = pe.Err
-       case *SyscallError:
-               err = pe.Err
-       }
+       err = underlyingError(err)
        return err == syscall.EEXIST || err == syscall.ENOTEMPTY || err == ErrExist
 }
 
 func isNotExist(err error) bool {
-       switch pe := err.(type) {
-       case nil:
-               return false
-       case *PathError:
-               err = pe.Err
-       case *LinkError:
-               err = pe.Err
-       case *SyscallError:
-               err = pe.Err
-       }
+       err = underlyingError(err)
        return err == syscall.ENOENT || err == ErrNotExist
 }
 
 func isPermission(err error) bool {
-       switch pe := err.(type) {
-       case nil:
-               return false
-       case *PathError:
-               err = pe.Err
-       case *LinkError:
-               err = pe.Err
-       case *SyscallError:
-               err = pe.Err
-       }
+       err = underlyingError(err)
        return err == syscall.EACCES || err == syscall.EPERM || err == ErrPermission
 }
index 2c1c39c414b1414b8dea1af3494619161aeb80be..5a57c0d1e681cf8f3db2b02b69ebd015b52bc478 100644 (file)
@@ -7,16 +7,7 @@ package os
 import "syscall"
 
 func isExist(err error) bool {
-       switch pe := err.(type) {
-       case nil:
-               return false
-       case *PathError:
-               err = pe.Err
-       case *LinkError:
-               err = pe.Err
-       case *SyscallError:
-               err = pe.Err
-       }
+       err = underlyingError(err)
        return err == syscall.ERROR_ALREADY_EXISTS ||
                err == syscall.ERROR_FILE_EXISTS || err == ErrExist
 }
@@ -24,31 +15,13 @@ func isExist(err error) bool {
 const _ERROR_BAD_NETPATH = syscall.Errno(53)
 
 func isNotExist(err error) bool {
-       switch pe := err.(type) {
-       case nil:
-               return false
-       case *PathError:
-               err = pe.Err
-       case *LinkError:
-               err = pe.Err
-       case *SyscallError:
-               err = pe.Err
-       }
+       err = underlyingError(err)
        return err == syscall.ERROR_FILE_NOT_FOUND ||
                err == _ERROR_BAD_NETPATH ||
                err == syscall.ERROR_PATH_NOT_FOUND || err == ErrNotExist
 }
 
 func isPermission(err error) bool {
-       switch pe := err.(type) {
-       case nil:
-               return false
-       case *PathError:
-               err = pe.Err
-       case *LinkError:
-               err = pe.Err
-       case *SyscallError:
-               err = pe.Err
-       }
+       err = underlyingError(err)
        return err == syscall.ERROR_ACCESS_DENIED || err == ErrPermission
 }