Commit 3d562de8 authored by bogem's avatar bogem Committed by Ian Lance Taylor

os: delete code duplications in error files

Change-Id: I1ec2fcf81a7a9e45a2fae8c02c8adabc7841b4fa
Reviewed-on: https://go-review.googlesource.com/29013Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent ca993d67
...@@ -63,3 +63,16 @@ func IsNotExist(err error) bool { ...@@ -63,3 +63,16 @@ func IsNotExist(err error) bool {
func IsPermission(err error) bool { func IsPermission(err error) bool {
return isPermission(err) 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
}
...@@ -5,46 +5,30 @@ ...@@ -5,46 +5,30 @@
package os package os
func isExist(err error) bool { func isExist(err error) bool {
switch pe := err.(type) { return checkErrMessageContent(err, " exists")
case nil:
return false
case *PathError:
err = pe.Err
case *LinkError:
err = pe.Err
case *SyscallError:
err = pe.Err
}
return contains(err.Error(), " exists")
} }
func isNotExist(err error) bool { func isNotExist(err error) bool {
switch pe := err.(type) { return checkErrMessageContent(err, "does not exist", "not found",
case nil: "has been removed", "no parent")
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")
} }
func isPermission(err error) bool { func isPermission(err error) bool {
switch pe := err.(type) { return checkErrMessageContent(err, "permission denied")
case nil: }
// checkErrMessageContent checks if err message contains one of msgs.
func checkErrMessageContent(err error, msgs ...string) bool {
if err == nil {
return false 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. // contains is a local version of strings.Contains. It knows len(sep) > 1.
......
...@@ -9,43 +9,16 @@ package os ...@@ -9,43 +9,16 @@ package os
import "syscall" import "syscall"
func isExist(err error) bool { func isExist(err error) bool {
switch pe := err.(type) { err = underlyingError(err)
case nil:
return false
case *PathError:
err = pe.Err
case *LinkError:
err = pe.Err
case *SyscallError:
err = pe.Err
}
return err == syscall.EEXIST || err == syscall.ENOTEMPTY || err == ErrExist return err == syscall.EEXIST || err == syscall.ENOTEMPTY || err == ErrExist
} }
func isNotExist(err error) bool { func isNotExist(err error) bool {
switch pe := err.(type) { err = underlyingError(err)
case nil:
return false
case *PathError:
err = pe.Err
case *LinkError:
err = pe.Err
case *SyscallError:
err = pe.Err
}
return err == syscall.ENOENT || err == ErrNotExist return err == syscall.ENOENT || err == ErrNotExist
} }
func isPermission(err error) bool { func isPermission(err error) bool {
switch pe := err.(type) { err = underlyingError(err)
case nil:
return false
case *PathError:
err = pe.Err
case *LinkError:
err = pe.Err
case *SyscallError:
err = pe.Err
}
return err == syscall.EACCES || err == syscall.EPERM || err == ErrPermission return err == syscall.EACCES || err == syscall.EPERM || err == ErrPermission
} }
...@@ -7,16 +7,7 @@ package os ...@@ -7,16 +7,7 @@ package os
import "syscall" import "syscall"
func isExist(err error) bool { func isExist(err error) bool {
switch pe := err.(type) { err = underlyingError(err)
case nil:
return false
case *PathError:
err = pe.Err
case *LinkError:
err = pe.Err
case *SyscallError:
err = pe.Err
}
return err == syscall.ERROR_ALREADY_EXISTS || return err == syscall.ERROR_ALREADY_EXISTS ||
err == syscall.ERROR_FILE_EXISTS || err == ErrExist err == syscall.ERROR_FILE_EXISTS || err == ErrExist
} }
...@@ -24,31 +15,13 @@ func isExist(err error) bool { ...@@ -24,31 +15,13 @@ func isExist(err error) bool {
const _ERROR_BAD_NETPATH = syscall.Errno(53) const _ERROR_BAD_NETPATH = syscall.Errno(53)
func isNotExist(err error) bool { func isNotExist(err error) bool {
switch pe := err.(type) { err = underlyingError(err)
case nil:
return false
case *PathError:
err = pe.Err
case *LinkError:
err = pe.Err
case *SyscallError:
err = pe.Err
}
return err == syscall.ERROR_FILE_NOT_FOUND || return err == syscall.ERROR_FILE_NOT_FOUND ||
err == _ERROR_BAD_NETPATH || err == _ERROR_BAD_NETPATH ||
err == syscall.ERROR_PATH_NOT_FOUND || err == ErrNotExist err == syscall.ERROR_PATH_NOT_FOUND || err == ErrNotExist
} }
func isPermission(err error) bool { func isPermission(err error) bool {
switch pe := err.(type) { err = underlyingError(err)
case nil:
return false
case *PathError:
err = pe.Err
case *LinkError:
err = pe.Err
case *SyscallError:
err = pe.Err
}
return err == syscall.ERROR_ACCESS_DENIED || err == ErrPermission return err == syscall.ERROR_ACCESS_DENIED || err == ErrPermission
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment