Commit 4853c517 authored by Russ Cox's avatar Russ Cox

os: do not interpret 0-length read as EOF

Fixes #2402.

R=golang-dev, bradfitz, r
CC=golang-dev
https://golang.org/cl/5298081
parent 9db3f78c
......@@ -69,7 +69,7 @@ func (file *File) Read(b []byte) (n int, err Error) {
if n < 0 {
n = 0
}
if n == 0 && !iserror(e) {
if n == 0 && len(b) > 0 && !iserror(e) {
return 0, EOF
}
if iserror(e) {
......
......@@ -165,6 +165,27 @@ func TestLstat(t *testing.T) {
}
}
// Read with length 0 should not return EOF.
func TestRead0(t *testing.T) {
path := sfdir + "/" + sfname
f, err := Open(path)
if err != nil {
t.Fatal("open failed:", err)
}
defer f.Close()
b := make([]byte, 0)
n, err := f.Read(b)
if n != 0 || err != nil {
t.Errorf("Read(0) = %d, %v, want 0, nil", n, err)
}
b = make([]byte, 100)
n, err = f.Read(b)
if n <= 0 || err != nil {
t.Errorf("Read(100) = %d, %v, want >0, nil", n, err)
}
}
func testReaddirnames(dir string, contents []string, t *testing.T) {
file, err := Open(dir)
defer file.Close()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment