diff options
author | Russ Cox <rsc@golang.org> | 2009-06-25 20:24:55 -0700 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2009-06-25 20:24:55 -0700 |
commit | b26cd1bfcd7107d8208595614ba45f54d5efacf6 (patch) | |
tree | 1596fd2f89c1d896cdf5772aebc910f4e0ff5bda /doc/progs/file.go | |
parent | 37fd11a43607dc5f7ff5c38311b060ada2a0e7a5 (diff) | |
download | golang-b26cd1bfcd7107d8208595614ba45f54d5efacf6.tar.gz |
Change os.Error convention:
echo back context of call in error if likely to be useful.
For example, if os.Open("/etc/passwd", os.O_RDONLY)
fails with syscall.EPERM, it returns as the os.Error
&PathError{
Op: "open",
Path: "/etc/passwd"
Error: os.EPERM
}
which formats as
open /etc/passwd: permission denied
Not converted:
datafmt
go/...
google/...
regexp
tabwriter
template
R=r
DELTA=1153 (561 added, 156 deleted, 436 changed)
OCL=30738
CL=30781
Diffstat (limited to 'doc/progs/file.go')
-rw-r--r-- | doc/progs/file.go | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/doc/progs/file.go b/doc/progs/file.go index ff796c565..bda3890de 100644 --- a/doc/progs/file.go +++ b/doc/progs/file.go @@ -29,7 +29,10 @@ var ( func Open(name string, mode int, perm int) (file *File, err os.Error) { r, e := syscall.Open(name, mode, perm); - return newFile(r, name), os.ErrnoToError(e) + if e != 0 { + err = os.Errno(e); + } + return newFile(r, name), err } func (file *File) Close() os.Error { @@ -38,7 +41,10 @@ func (file *File) Close() os.Error { } e := syscall.Close(file.fd); file.fd = -1; // so it can't be closed again - return os.ErrnoToError(e); + if e != 0 { + return os.Errno(e); + } + return nil } func (file *File) Read(b []byte) (ret int, err os.Error) { @@ -46,7 +52,10 @@ func (file *File) Read(b []byte) (ret int, err os.Error) { return -1, os.EINVAL } r, e := syscall.Read(file.fd, b); - return int(r), os.ErrnoToError(e) + if e != 0 { + err = os.Errno(e); + } + return int(r), err } func (file *File) Write(b []byte) (ret int, err os.Error) { @@ -54,7 +63,10 @@ func (file *File) Write(b []byte) (ret int, err os.Error) { return -1, os.EINVAL } r, e := syscall.Write(file.fd, b); - return int(r), os.ErrnoToError(e) + if e != 0 { + err = os.Errno(e); + } + return int(r), err } func (file *File) String() string { |