Address bug in inmemory filesystem WriteAt method

pull/4/head
Stephen J Day 2014-12-08 21:08:07 -08:00
parent f3f70d151d
commit 45c29be442
1 changed files with 8 additions and 7 deletions

View File

@ -294,15 +294,16 @@ func (f *file) ReadAt(p []byte, offset int64) (n int, err error) {
} }
func (f *file) WriteAt(p []byte, offset int64) (n int, err error) { func (f *file) WriteAt(p []byte, offset int64) (n int, err error) {
if len(f.data) > 0 && offset >= int64(len(f.data)) { off := int(offset)
// Extend missing region with a zero pad, while also preallocating out to size of p. if cap(f.data) < off+len(p) {
pad := offset - int64(len(f.data)) data := make([]byte, len(f.data), off+len(p))
size := len(p) + int(pad) copy(data, f.data)
f.data = append(f.data, make([]byte, pad, size)...) f.data = data
} }
f.data = append(f.data, p...) f.data = f.data[:off+len(p)]
return len(p), nil
return copy(f.data[off:off+len(p)], p), nil
} }
func (f *file) String() string { func (f *file) String() string {