Attempted to fix memfs.
parent
6d01ffa44f
commit
339bc03e5e
|
@ -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 {
|
||||
|
|
Loading…
Reference in New Issue