| // 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 os |
| |
| import syscall "syscall" |
| |
| // Errors are singleton structures. Use the String() method to get their contents -- |
| // it handles the nil (no error) case. |
| export type Error struct { |
| s string |
| } |
| |
| var ErrorTab = new(map[int64] *Error); |
| |
| export func NewError(s string) *Error { |
| return &Error{s} |
| } |
| |
| export func ErrnoToError(errno int64) *Error { |
| if errno == 0 { |
| return nil |
| } |
| err, ok := ErrorTab[errno]; |
| if ok { |
| return err |
| } |
| e := NewError(syscall.errstr(errno)); |
| ErrorTab[errno] = e; |
| return e; |
| } |
| export var ( |
| ENONE = ErrnoToError(syscall.ENONE); |
| EPERM = ErrnoToError(syscall.EPERM); |
| ENOENT = ErrnoToError(syscall.ENOENT); |
| ESRCH = ErrnoToError(syscall.ESRCH); |
| EINTR = ErrnoToError(syscall.EINTR); |
| EIO = ErrnoToError(syscall.EIO); |
| ENXIO = ErrnoToError(syscall.ENXIO); |
| E2BIG = ErrnoToError(syscall.E2BIG); |
| ENOEXEC = ErrnoToError(syscall.ENOEXEC); |
| EBADF = ErrnoToError(syscall.EBADF); |
| ECHILD = ErrnoToError(syscall.ECHILD); |
| EDEADLK = ErrnoToError(syscall.EDEADLK); |
| ENOMEM = ErrnoToError(syscall.ENOMEM); |
| EACCES = ErrnoToError(syscall.EACCES); |
| EFAULT = ErrnoToError(syscall.EFAULT); |
| ENOTBLK = ErrnoToError(syscall.ENOTBLK); |
| EBUSY = ErrnoToError(syscall.EBUSY); |
| EEXIST = ErrnoToError(syscall.EEXIST); |
| EXDEV = ErrnoToError(syscall.EXDEV); |
| ENODEV = ErrnoToError(syscall.ENODEV); |
| ENOTDIR = ErrnoToError(syscall.ENOTDIR); |
| EISDIR = ErrnoToError(syscall.EISDIR); |
| EINVAL = ErrnoToError(syscall.EINVAL); |
| ENFILE = ErrnoToError(syscall.ENFILE); |
| EMFILE = ErrnoToError(syscall.EMFILE); |
| ENOTTY = ErrnoToError(syscall.ENOTTY); |
| ETXTBSY = ErrnoToError(syscall.ETXTBSY); |
| EFBIG = ErrnoToError(syscall.EFBIG); |
| ENOSPC = ErrnoToError(syscall.ENOSPC); |
| ESPIPE = ErrnoToError(syscall.ESPIPE); |
| EROFS = ErrnoToError(syscall.EROFS); |
| EMLINK = ErrnoToError(syscall.EMLINK); |
| EPIPE = ErrnoToError(syscall.EPIPE); |
| EDOM = ErrnoToError(syscall.EDOM); |
| ERANGE = ErrnoToError(syscall.ERANGE); |
| EAGAIN = ErrnoToError(syscall.EAGAIN); |
| ) |
| const NoError = "No Error" |
| |
| func (e *Error) String() string { |
| if e == nil { |
| return NoError |
| } |
| return e.s |
| } |