diff options
author | Russ Cox <rsc@golang.org> | 2014-10-28 15:00:13 -0400 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2014-10-28 15:00:13 -0400 |
commit | 45ce02fb3768d73154148259eac8c6dc787d56e7 (patch) | |
tree | 2819832837de89110ff6f09153bd3128a910035e /src/os/file_unix.go | |
parent | e2c1e44befb3dc8e0f5c58843eaf0f0f787e029b (diff) | |
download | go-45ce02fb3768d73154148259eac8c6dc787d56e7.tar.gz |
os: do not assume syscall i/o funcs return n=0 on error
Fixes issue 9007.
LGTM=iant, r
R=r, iant
CC=golang-codereviews
https://codereview.appspot.com/160670043
Diffstat (limited to 'src/os/file_unix.go')
-rw-r--r-- | src/os/file_unix.go | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/os/file_unix.go b/src/os/file_unix.go index bba0d9c0f..4e413fbe8 100644 --- a/src/os/file_unix.go +++ b/src/os/file_unix.go @@ -187,7 +187,7 @@ func (f *File) read(b []byte) (n int, err error) { if needsMaxRW && len(b) > maxRW { b = b[:maxRW] } - return syscall.Read(f.fd, b) + return fixCount(syscall.Read(f.fd, b)) } // pread reads len(b) bytes from the File starting at byte offset off. @@ -197,7 +197,7 @@ func (f *File) pread(b []byte, off int64) (n int, err error) { if needsMaxRW && len(b) > maxRW { b = b[:maxRW] } - return syscall.Pread(f.fd, b, off) + return fixCount(syscall.Pread(f.fd, b, off)) } // write writes len(b) bytes to the File. @@ -208,7 +208,7 @@ func (f *File) write(b []byte) (n int, err error) { if needsMaxRW && len(bcap) > maxRW { bcap = bcap[:maxRW] } - m, err := syscall.Write(f.fd, bcap) + m, err := fixCount(syscall.Write(f.fd, bcap)) n += m // If the syscall wrote some data but not all (short write) @@ -234,7 +234,7 @@ func (f *File) pwrite(b []byte, off int64) (n int, err error) { if needsMaxRW && len(b) > maxRW { b = b[:maxRW] } - return syscall.Pwrite(f.fd, b, off) + return fixCount(syscall.Pwrite(f.fd, b, off)) } // seek sets the offset for the next Read or Write on file to offset, interpreted @@ -242,7 +242,7 @@ func (f *File) pwrite(b []byte, off int64) (n int, err error) { // relative to the current offset, and 2 means relative to the end. // It returns the new offset and an error, if any. func (f *File) seek(offset int64, whence int) (ret int64, err error) { - return syscall.Seek(f.fd, offset, whence) + return fixCount(syscall.Seek(f.fd, offset, whence)) } // Truncate changes the size of the named file. |