// Copies data from req.Data to the File's data array beginning at index req.Offset. // Grows file.data if necessary. func (file *File) Write(req *fuse.WriteRequest, resp *fuse.WriteResponse, intr fs.Intr) fuse.Error { filesystem.Lock(file) defer filesystem.Unlock(file) util.P_out(req.String()) writeSize := len(req.Data) size := uint64(req.Offset) + uint64(writeSize) if size < file.Attr().Size { size = file.Attr().Size } if size > uint64(cap(file.data)) { tmp := file.data file.data = make([]byte, size, size*2) copy(file.data, tmp) } else { file.data = file.data[:size] } copy(file.data[req.Offset:], req.Data) resp.Size = writeSize file.Attrs.Size = uint64(size) file.Attrs.Mtime = time.Now() file.dirty = true return nil }