diff --git a/iofs_test.go b/iofs_test.go index 1d310e54..e7795d0f 100644 --- a/iofs_test.go +++ b/iofs_test.go @@ -29,7 +29,15 @@ func TestIOFS(t *testing.T) { t.Fatal("OpenFile (O_CREATE) failed:", err) } - f.Close() + _, err = f.WriteString("a") + if err != nil { + t.Fatal("WriteString failed:", err) + } + + err = f.Close() + if err != nil { + t.Fatal("Close failed:", err) + } if err := fstest.TestFS(NewIOFS(mmfs), "dir1/dir2/test.txt"); err != nil { t.Error(err) diff --git a/mem/file.go b/mem/file.go index 5ef8b6a3..853f4ed9 100644 --- a/mem/file.go +++ b/mem/file.go @@ -210,6 +210,11 @@ func (f *File) ReadAt(b []byte, off int64) (n int, err error) { atomic.StoreInt64(&f.at, off) n, err = f.Read(b) atomic.StoreInt64(&f.at, prev) + if int64(n) == int64(len(f.fileData.data))-off { + if n < len(b) { + err = io.EOF + } + } return } diff --git a/mem/file_test.go b/mem/file_test.go index 998a5d0b..e84b44c3 100644 --- a/mem/file_test.go +++ b/mem/file_test.go @@ -232,7 +232,7 @@ func TestFileReadAtSeekOffset(t *testing.T) { t.Fatal("expected 0") } - b := make([]byte, 4) + b := make([]byte, 4, 5) n, err := f.ReadAt(b, 0) if err != nil { t.Fatal(err) @@ -244,6 +244,17 @@ func TestFileReadAtSeekOffset(t *testing.T) { t.Fail() } + n, err = f.ReadAt(b[:cap(b)], 0) + if err != io.EOF { + t.Fatal(err) + } + if n != 4 { + t.Fail() + } + if string(b) != "TEST" { + t.Fail() + } + offsetAfterReadAt, err := f.Seek(0, io.SeekCurrent) if err != nil { t.Fatal(err)