| // Copyright 2009 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package syscall |
| |
| import "internal/oserror" |
| |
| // An Errno is an unsigned number describing an error condition. |
| // It implements the error interface. The zero Errno is by convention |
| // a non-error, so code to convert from Errno to error should use: |
| // |
| // err = nil |
| // if errno != 0 { |
| // err = errno |
| // } |
| // |
| // Errno values can be tested against error values from the os package |
| // using errors.Is. For example: |
| // |
| // _, _, err := syscall.Syscall(...) |
| // if errors.Is(err, fs.ErrNotExist) ... |
| type Errno uintptr |
| |
| func (e Errno) Error() string { |
| return Errstr(int(e)) |
| } |
| |
| func (e Errno) Is(target error) bool { |
| switch target { |
| case oserror.ErrPermission: |
| return e == EACCES || e == EPERM |
| case oserror.ErrExist: |
| return e == EEXIST || e == ENOTEMPTY |
| case oserror.ErrNotExist: |
| return e == ENOENT |
| } |
| return false |
| } |
| |
| func (e Errno) Temporary() bool { |
| return e == EINTR || e == EMFILE || e == ENFILE || e.Timeout() |
| } |
| |
| func (e Errno) Timeout() bool { |
| return e == EAGAIN || e == EWOULDBLOCK || e == ETIMEDOUT |
| } |