1 // Copyright 2009 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
7 import syscall "syscall"
9 // An Error can represent any printable error condition.
10 type Error interface {
14 // A helper type that can be embedded or wrapped to simplify satisfying
16 type ErrorString string
18 func (e ErrorString) String() string { return string(e) }
19 func (e ErrorString) Temporary() bool { return false }
20 func (e ErrorString) Timeout() bool { return false }
22 // Note: If the name of the function NewError changes,
23 // pkg/go/doc/doc.go should be adjusted since it hardwires
24 // this name in a heuristic.
26 // NewError converts s to an ErrorString, which satisfies the Error interface.
27 func NewError(s string) Error { return ErrorString(s) }
29 // Errno is the Unix error number. Names such as EINVAL are simple
30 // wrappers to convert the error number into an Error.
33 func (e Errno) String() string { return syscall.Errstr(int(e)) }
35 func (e Errno) Temporary() bool {
36 return e == Errno(syscall.EINTR) || e.Timeout()
39 func (e Errno) Timeout() bool {
40 return e == Errno(syscall.EAGAIN) || e == Errno(syscall.EWOULDBLOCK)
43 // Commonly known Unix errors.
45 EPERM Error = Errno(syscall.EPERM)
46 ENOENT Error = Errno(syscall.ENOENT)
47 ESRCH Error = Errno(syscall.ESRCH)
48 EINTR Error = Errno(syscall.EINTR)
49 EIO Error = Errno(syscall.EIO)
50 ENXIO Error = Errno(syscall.ENXIO)
51 E2BIG Error = Errno(syscall.E2BIG)
52 ENOEXEC Error = Errno(syscall.ENOEXEC)
53 EBADF Error = Errno(syscall.EBADF)
54 ECHILD Error = Errno(syscall.ECHILD)
55 EDEADLK Error = Errno(syscall.EDEADLK)
56 ENOMEM Error = Errno(syscall.ENOMEM)
57 EACCES Error = Errno(syscall.EACCES)
58 EFAULT Error = Errno(syscall.EFAULT)
59 EBUSY Error = Errno(syscall.EBUSY)
60 EEXIST Error = Errno(syscall.EEXIST)
61 EXDEV Error = Errno(syscall.EXDEV)
62 ENODEV Error = Errno(syscall.ENODEV)
63 ENOTDIR Error = Errno(syscall.ENOTDIR)
64 EISDIR Error = Errno(syscall.EISDIR)
65 EINVAL Error = Errno(syscall.EINVAL)
66 ENFILE Error = Errno(syscall.ENFILE)
67 EMFILE Error = Errno(syscall.EMFILE)
68 ENOTTY Error = Errno(syscall.ENOTTY)
69 EFBIG Error = Errno(syscall.EFBIG)
70 ENOSPC Error = Errno(syscall.ENOSPC)
71 ESPIPE Error = Errno(syscall.ESPIPE)
72 EROFS Error = Errno(syscall.EROFS)
73 EMLINK Error = Errno(syscall.EMLINK)
74 EPIPE Error = Errno(syscall.EPIPE)
75 EAGAIN Error = Errno(syscall.EAGAIN)
76 EDOM Error = Errno(syscall.EDOM)
77 ERANGE Error = Errno(syscall.ERANGE)
78 EADDRINUSE Error = Errno(syscall.EADDRINUSE)
79 ECONNREFUSED Error = Errno(syscall.ECONNREFUSED)
80 ENAMETOOLONG Error = Errno(syscall.ENAMETOOLONG)
81 EAFNOSUPPORT Error = Errno(syscall.EAFNOSUPPORT)
84 // PathError records an error and the operation and file path that caused it.
85 type PathError struct {
91 func (e *PathError) String() string { return e.Op + " " + e.Path + ": " + e.Error.String() }
93 // SyscallError records an error from a specific system call.
94 type SyscallError struct {
99 func (e *SyscallError) String() string { return e.Syscall + ": " + e.Errno.String() }
101 // Note: If the name of the function NewSyscallError changes,
102 // pkg/go/doc/doc.go should be adjusted since it hardwires
103 // this name in a heuristic.
105 // NewSyscallError returns, as an Error, a new SyscallError
106 // with the given system call name and error number.
107 // As a convenience, if errno is 0, NewSyscallError returns nil.
108 func NewSyscallError(syscall string, errno int) Error {
112 return &SyscallError{syscall, Errno(errno)}