Skip to content

Commit fcde312

Browse files
authored
Never return -1 when a Read*() or Write*() call has an error (#8)
Return 0 or the number of bytes that were read/written up until the error occurred. Fixes #6
1 parent 2da40ee commit fcde312

File tree

2 files changed

+13
-13
lines changed

2 files changed

+13
-13
lines changed

client.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -1102,7 +1102,7 @@ func (f *File) Read(b []byte) (n int, err error) {
11021102

11031103
off, err := f.seek(0, io.SeekCurrent)
11041104
if err != nil {
1105-
return -1, &os.PathError{Op: "read", Path: f.name, Err: err}
1105+
return 0, &os.PathError{Op: "read", Path: f.name, Err: err}
11061106
}
11071107

11081108
n, err = f.readAt(b, off)
@@ -1124,7 +1124,7 @@ func (f *File) Read(b []byte) (n int, err error) {
11241124
// ReadAt implements io.ReaderAt.
11251125
func (f *File) ReadAt(b []byte, off int64) (n int, err error) {
11261126
if off < 0 {
1127-
return -1, os.ErrInvalid
1127+
return 0, os.ErrInvalid
11281128
}
11291129

11301130
n, err = f.readAt(b, off)
@@ -1181,7 +1181,7 @@ func (f *File) maxTransactSize() int {
11811181

11821182
func (f *File) readAt(b []byte, off int64) (n int, err error) {
11831183
if off < 0 {
1184-
return -1, os.ErrInvalid
1184+
return 0, os.ErrInvalid
11851185
}
11861186

11871187
maxReadSize := f.maxReadSize()
@@ -1599,7 +1599,7 @@ func (f *File) Write(b []byte) (n int, err error) {
15991599

16001600
off, err := f.seek(0, io.SeekCurrent)
16011601
if err != nil {
1602-
return -1, &os.PathError{Op: "write", Path: f.name, Err: err}
1602+
return 0, &os.PathError{Op: "write", Path: f.name, Err: err}
16031603
}
16041604

16051605
n, err = f.writeAt(b, off)
@@ -1626,7 +1626,7 @@ func (f *File) WriteAt(b []byte, off int64) (n int, err error) {
16261626

16271627
func (f *File) writeAt(b []byte, off int64) (n int, err error) {
16281628
if off < 0 {
1629-
return -1, os.ErrInvalid
1629+
return 0, os.ErrInvalid
16301630
}
16311631

16321632
if len(b) == 0 {
@@ -1642,14 +1642,14 @@ func (f *File) writeAt(b []byte, off int64) (n int, err error) {
16421642
case len(b)-n <= maxWriteSize:
16431643
m, err := f.writeAtChunk(b[n:], int64(n)+off)
16441644
if err != nil {
1645-
return -1, err
1645+
return 0, err
16461646
}
16471647

16481648
n += m
16491649
default:
16501650
m, err := f.writeAtChunk(b[n:n+maxWriteSize], int64(n)+off)
16511651
if err != nil {
1652-
return -1, err
1652+
return 0, err
16531653
}
16541654

16551655
n += m

transport.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ func direct(tcpConn net.Conn) transport {
3030

3131
func (t *directTCP) Write(p []byte) (n int, err error) {
3232
if len(p) > maxDirectTCPSize {
33-
return -1, errors.New("max transport size exceeds")
33+
return 0, errors.New("max transport size exceeds")
3434
}
3535

3636
bs := t.sb[:]
@@ -39,12 +39,12 @@ func (t *directTCP) Write(p []byte) (n int, err error) {
3939

4040
_, err = t.conn.Write(bs)
4141
if err != nil {
42-
return -1, err
42+
return 0, err
4343
}
4444

4545
n, err = t.conn.Write(p)
4646
if err != nil {
47-
return -1, err
47+
return 0, err
4848
}
4949

5050
return n + 4, nil
@@ -55,11 +55,11 @@ func (t *directTCP) ReadSize() (size int, err error) {
5555

5656
_, err = io.ReadFull(t.conn, bs)
5757
if err != nil {
58-
return -1, err
58+
return 0, err
5959
}
6060

6161
if bs[0] != 0 {
62-
return -1, errors.New("invalid transport format")
62+
return 0, errors.New("invalid transport format")
6363
}
6464

6565
return int(be.Uint32(bs)), nil
@@ -68,7 +68,7 @@ func (t *directTCP) ReadSize() (size int, err error) {
6868
func (t *directTCP) Read(p []byte) (n int, err error) {
6969
n, err = io.ReadFull(t.conn, p)
7070
if err != nil {
71-
return -1, err
71+
return 0, err
7272
}
7373

7474
return n, err

0 commit comments

Comments
 (0)