diff options
author | Rob Pike <r@golang.org> | 2008-09-11 13:03:46 -0700 |
---|---|---|
committer | Rob Pike <r@golang.org> | 2008-09-11 13:03:46 -0700 |
commit | 9c2e6bf6cdb8d8c8483dc01f932d9575ace72e96 (patch) | |
tree | 763617ba82fc9aa9c91c13f29ba2c2b066d1b360 /src/lib/os/os_error.go | |
parent | 7677ea815dda07ea7a8a61c5726236574e4e3f49 (diff) | |
download | golang-9c2e6bf6cdb8d8c8483dc01f932d9575ace72e96.tar.gz |
add lib/os to standard build
break lib/os into multiple source files
R=rsc
DELTA=189 (178 added, 4 deleted, 7 changed)
OCL=15149
CL=15152
Diffstat (limited to 'src/lib/os/os_error.go')
-rw-r--r-- | src/lib/os/os_error.go | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/src/lib/os/os_error.go b/src/lib/os/os_error.go new file mode 100644 index 000000000..2da63da5a --- /dev/null +++ b/src/lib/os/os_error.go @@ -0,0 +1,76 @@ +// 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 Print()/String() methods to get their contents -- +// they handle the nil (no error) case. +export type Error struct { + s string +} + +var ErrorTab = new(map[int64] *Error); + +export func ErrnoToError(errno int64) *Error { + if errno == 0 { + return nil + } + err, ok := ErrorTab[errno] + if ok { + return err + } + e := new(Error); + e.s = 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 + } else { + return e.s + } +} |