Filled in some inode implementation.

geesefs-0-30-9
Aaron Jacobs 2015-03-02 15:54:56 +11:00
parent 830f272aab
commit 44b62ac9c3
2 changed files with 42 additions and 15 deletions

View File

@ -137,10 +137,6 @@ func (fs *memFS) LookUpInode(
inode := fs.getInodeForReadingOrDie(req.Parent)
defer inode.mu.RUnlock()
if !inode.dir {
panic("Found non-dir.")
}
// Does the directory have an entry with the given name?
childID, ok := inode.LookUpChild(req.Name)
if !ok {
@ -223,15 +219,11 @@ func (fs *memFS) ReadDir(
panic("Found non-dir.")
}
// Return the entries requested.
for i := int(req.Offset); i < len(inode.entries); i++ {
resp.Data = fuseutil.AppendDirent(resp.Data, inode.entries[i])
// Trim and stop early if we've exceeded the requested size.
if len(resp.Data) > req.Size {
resp.Data = resp.Data[:req.Size]
break
}
// Serve the request.
resp.Data, err = inode.ReadDir(int(req.Offset), req.Size)
if err != nil {
err = fmt.Errorf("inode.ReadDir: %v", err)
return
}
return

View File

@ -55,7 +55,14 @@ type inode struct {
contents []byte // GUARDED_BY(mu)
}
func newInode(dir bool) (inode *inode)
func newInode(dir bool) (in *inode) {
in = &inode{
dir: dir,
}
in.mu = syncutil.NewInvariantMutex(in.checkInvariants)
return
}
func (inode *inode) checkInvariants()
@ -63,4 +70,32 @@ func (inode *inode) checkInvariants()
//
// REQUIRES: inode.dir
// SHARED_LOCKS_REQUIRED(inode.mu)
func (inode *inode) LookUpChild(name string) (id fuse.InodeID, ok bool)
func (inode *inode) LookUpChild(name string) (id fuse.InodeID, ok bool) {
if !inode.dir {
panic("LookUpChild called on non-directory.")
}
panic("TODO")
}
// Serve a ReadDir request.
//
// REQUIRED: inode.dir
// SHARED_LOCKS_REQUIRED(inode.mu)
func (inode *inode) ReadDir(offset int, size int) (data []byte, err error) {
if !inode.dir {
panic("ReadDir called on non-directory.")
}
for i := offset; i < len(inode.entries); i++ {
data = fuseutil.AppendDirent(data, inode.entries[i])
// Trim and stop early if we've exceeded the requested size.
if len(data) > size {
data = data[:size]
break
}
}
return
}