Commit 339bc03e authored by Aaron Jacobs's avatar Aaron Jacobs

Attempted to fix memfs.

parent 6d01ffa4
......@@ -278,7 +278,7 @@ func (in *inode) RemoveChild(name string) {
// Serve a ReadDir request.
//
// REQUIRES: in.isDir()
func (in *inode) ReadDir(offset int, size int) (data []byte) {
func (in *inode) ReadDir(p []byte, offset int) (n int) {
if !in.isDir() {
panic("ReadDir called on non-directory.")
}
......@@ -291,13 +291,12 @@ func (in *inode) ReadDir(offset int, size int) (data []byte) {
continue
}
data = fuseutil.AppendDirent(data, in.entries[i])
// Trim and stop early if we've exceeded the requested size.
if len(data) > size {
data = data[:size]
tmp := fuseutil.WriteDirent(p[n:], in.entries[i])
if n == 0 {
break
}
n += tmp
}
return
......
......@@ -428,7 +428,9 @@ func (fs *memFS) Rename(
existingID, _, ok := newParent.LookUpChild(op.NewName)
if ok {
existing := fs.getInodeOrDie(existingID)
if existing.isDir() && len(existing.ReadDir(0, 1024)) > 0 {
var buf [4096]byte
if existing.isDir() && existing.ReadDir(buf[:], 0) > 0 {
err = fuse.ENOTEMPTY
return
}
......@@ -538,7 +540,7 @@ func (fs *memFS) ReadDir(
inode := fs.getInodeOrDie(op.Inode)
// Serve the request.
op.Data = inode.ReadDir(int(op.Offset), op.Size)
op.BytesRead = inode.ReadDir(op.Dst, int(op.Offset))
return
}
......@@ -571,9 +573,7 @@ func (fs *memFS) ReadFile(
inode := fs.getInodeOrDie(op.Inode)
// Serve the request.
op.Data = make([]byte, op.Size)
n, err := inode.ReadAt(op.Data, op.Offset)
op.Data = op.Data[:n]
op.BytesRead, err = inode.ReadAt(op.Dst, op.Offset)
// Don't return EOF errors; we just indicate EOF to fuse using a short read.
if err == io.EOF {
......
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