const maxRW = 1 << 30
// Read implements io.Reader.
-func (fd *FD) Read(p []byte) (n int, err error) {
+func (fd *FD) Read(p []byte) (int, error) {
if err := fd.readLock(); err != nil {
return 0, err
}
p = p[:maxRW]
}
for {
- n, err = syscall.Read(fd.Sysfd, p)
+ n, err := syscall.Read(fd.Sysfd, p)
if err != nil {
n = 0
if err == syscall.EAGAIN {
}
}
err = fd.eofError(n, err)
- break
+ return n, err
}
- return
}
// Pread wraps the pread system call.
-func (fd *FD) Pread(p []byte, off int64) (n int, err error) {
+func (fd *FD) Pread(p []byte, off int64) (int, error) {
if err := fd.readLock(); err != nil {
return 0, err
}
p = p[:maxRW]
}
for {
- n, err = syscall.Pread(fd.Sysfd, p, off)
+ n, err := syscall.Pread(fd.Sysfd, p, off)
if err != nil {
n = 0
if err == syscall.EAGAIN {
}
}
err = fd.eofError(n, err)
- break
+ return n, err
}
- return
}
// RecvFrom wraps the recvfrom network call.
-func (fd *FD) RecvFrom(p []byte) (n int, sa syscall.Sockaddr, err error) {
+func (fd *FD) RecvFrom(p []byte) (int, syscall.Sockaddr, error) {
if err := fd.readLock(); err != nil {
return 0, nil, err
}
return 0, nil, err
}
for {
- n, sa, err = syscall.Recvfrom(fd.Sysfd, p, 0)
+ n, sa, err := syscall.Recvfrom(fd.Sysfd, p, 0)
if err != nil {
n = 0
if err == syscall.EAGAIN {
}
}
err = fd.eofError(n, err)
- break
+ return n, sa, err
}
- return
}
// ReadMsg wraps the recvmsg network call.
-func (fd *FD) ReadMsg(p []byte, oob []byte) (n, oobn, flags int, sa syscall.Sockaddr, err error) {
+func (fd *FD) ReadMsg(p []byte, oob []byte) (int, int, int, syscall.Sockaddr, error) {
if err := fd.readLock(); err != nil {
return 0, 0, 0, nil, err
}
return 0, 0, 0, nil, err
}
for {
- n, oobn, flags, sa, err = syscall.Recvmsg(fd.Sysfd, p, oob, 0)
+ n, oobn, flags, sa, err := syscall.Recvmsg(fd.Sysfd, p, oob, 0)
if err != nil {
// TODO(dfc) should n and oobn be set to 0
if err == syscall.EAGAIN {
}
}
err = fd.eofError(n, err)
- break
+ return n, oobn, flags, sa, err
}
- return
}
// Write implements io.Writer.
-func (fd *FD) Write(p []byte) (nn int, err error) {
+func (fd *FD) Write(p []byte) (int, error) {
if err := fd.writeLock(); err != nil {
return 0, err
}
if err := fd.pd.prepareWrite(); err != nil {
return 0, err
}
+ var nn int
for {
- var n int
max := len(p)
if fd.IsStream && max-nn > maxRW {
max = nn + maxRW
}
- n, err = syscall.Write(fd.Sysfd, p[nn:max])
+ n, err := syscall.Write(fd.Sysfd, p[nn:max])
if n > 0 {
nn += n
}
if nn == len(p) {
- break
+ return nn, err
}
if err == syscall.EAGAIN {
if err = fd.pd.waitWrite(); err == nil {
}
}
if err != nil {
- break
+ return nn, err
}
if n == 0 {
- err = io.ErrUnexpectedEOF
- break
+ return nn, io.ErrUnexpectedEOF
}
}
- return
}
// Pwrite wraps the pwrite system call.
-func (fd *FD) Pwrite(p []byte, off int64) (nn int, err error) {
+func (fd *FD) Pwrite(p []byte, off int64) (int, error) {
if err := fd.writeLock(); err != nil {
return 0, err
}
if err := fd.pd.prepareWrite(); err != nil {
return 0, err
}
+ var nn int
for {
- var n int
max := len(p)
if fd.IsStream && max-nn > maxRW {
max = nn + maxRW
}
- n, err = syscall.Pwrite(fd.Sysfd, p[nn:max], off+int64(nn))
+ n, err := syscall.Pwrite(fd.Sysfd, p[nn:max], off+int64(nn))
if n > 0 {
nn += n
}
if nn == len(p) {
- break
+ return nn, err
}
if err == syscall.EAGAIN {
if err = fd.pd.waitWrite(); err == nil {
}
}
if err != nil {
- break
+ return nn, err
}
if n == 0 {
- err = io.ErrUnexpectedEOF
- break
+ return nn, io.ErrUnexpectedEOF
}
}
- return
}
// WriteTo wraps the sendto network call.
-func (fd *FD) WriteTo(p []byte, sa syscall.Sockaddr) (n int, err error) {
+func (fd *FD) WriteTo(p []byte, sa syscall.Sockaddr) (int, error) {
if err := fd.writeLock(); err != nil {
return 0, err
}
return 0, err
}
for {
- err = syscall.Sendto(fd.Sysfd, p, 0, sa)
+ err := syscall.Sendto(fd.Sysfd, p, 0, sa)
if err == syscall.EAGAIN {
if err = fd.pd.waitWrite(); err == nil {
continue
}
}
- break
- }
- if err == nil {
- n = len(p)
+ if err != nil {
+ return 0, err
+ }
+ return len(p), nil
}
- return
}
// WriteMsg wraps the sendmsg network call.
-func (fd *FD) WriteMsg(p []byte, oob []byte, sa syscall.Sockaddr) (n int, oobn int, err error) {
+func (fd *FD) WriteMsg(p []byte, oob []byte, sa syscall.Sockaddr) (int, int, error) {
if err := fd.writeLock(); err != nil {
return 0, 0, err
}
return 0, 0, err
}
for {
- n, err = syscall.SendmsgN(fd.Sysfd, p, oob, sa, 0)
+ n, err := syscall.SendmsgN(fd.Sysfd, p, oob, sa, 0)
if err == syscall.EAGAIN {
if err = fd.pd.waitWrite(); err == nil {
continue
}
}
- break
- }
- if err == nil {
- oobn = len(oob)
+ if err != nil {
+ return n, 0, err
+ }
+ return n, len(oob), err
}
- return
}
// WaitWrite waits until data can be written to fd.
}
// Accept wraps the accept network call.
-func (fd *FD) Accept() (newfd int, rsa syscall.Sockaddr, errcall string, err error) {
- if err = fd.readLock(); err != nil {
+func (fd *FD) Accept() (int, syscall.Sockaddr, string, error) {
+ if err := fd.readLock(); err != nil {
return -1, nil, "", err
}
defer fd.readUnlock()
- var s int
- if err = fd.pd.prepareRead(); err != nil {
+ if err := fd.pd.prepareRead(); err != nil {
return -1, nil, "", err
}
for {
- s, rsa, errcall, err = accept(fd.Sysfd)
+ s, rsa, errcall, err := accept(fd.Sysfd)
if err == nil {
return s, rsa, "", err
}
}
// Seek wraps syscall.Seek.
-func (fd *FD) Seek(offset int64, whence int) (ret int64, err error) {
+func (fd *FD) Seek(offset int64, whence int) (int64, error) {
if err := fd.incref(); err != nil {
return 0, err
}
// ReadDirent wraps syscall.ReadDirent.
// We treat this like an ordinary system call rather than a call
// that tries to fill the buffer.
-func (fd *FD) ReadDirent(buf []byte) (n int, err error) {
+func (fd *FD) ReadDirent(buf []byte) (int, error) {
if err := fd.incref(); err != nil {
return 0, err
}
// readConsole reads utf16 characters from console File,
// encodes them into utf8 and stores them in buffer b.
// It returns the number of utf8 bytes read and an error, if any.
-func (fd *FD) readConsole(b []byte) (n int, err error) {
+func (fd *FD) readConsole(b []byte) (int, error) {
if len(b) == 0 {
return 0, nil
}
return i, nil
}
-func (fd *FD) Pread(b []byte, off int64) (n int, err error) {
+func (fd *FD) Pread(b []byte, off int64) (int, error) {
if err := fd.readLock(); err != nil {
return 0, err
}
// writeConsole writes len(b) bytes to the console File.
// It returns the number of bytes written and an error, if any.
-func (fd *FD) writeConsole(b []byte) (n int, err error) {
- n = len(b)
+func (fd *FD) writeConsole(b []byte) (int, error) {
+ n := len(b)
runes := make([]rune, 0, 256)
if len(fd.lastbits) > 0 {
b = append(fd.lastbits, b...)
uint16s := utf16.Encode(chunk)
for len(uint16s) > 0 {
var written uint32
- err = syscall.WriteConsole(fd.Sysfd, &uint16s[0], uint32(len(uint16s)), &written, nil)
+ err := syscall.WriteConsole(fd.Sysfd, &uint16s[0], uint32(len(uint16s)), &written, nil)
if err != nil {
return 0, err
}
}
}
-func (fd *FD) Seek(offset int64, whence int) (ret int64, err error) {
+func (fd *FD) Seek(offset int64, whence int) (int64, error) {
if err := fd.incref(); err != nil {
return 0, err
}