68 lines
1.7 KiB
Go
68 lines
1.7 KiB
Go
package ffs
|
|
|
|
import (
|
|
"fusetest/furcadia"
|
|
"os"
|
|
"time"
|
|
|
|
"bazil.org/fuse"
|
|
"bazil.org/fuse/fs"
|
|
)
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// VAR ////////////////////////////////////////////////////////////////////////////////////////////
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
var (
|
|
// Filesystem context (there should only be one)
|
|
G_FS *FurcFS = nil
|
|
)
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// TYPE: FS ///////////////////////////////////////////////////////////////////////////////////////
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
type FurcFS struct {
|
|
RootDir *RootDir
|
|
_pounce *furcadia.PounceList
|
|
}
|
|
|
|
func InitFS(rootUID, rootGID uint32) *FurcFS {
|
|
if G_FS != nil {
|
|
panic("G_FS already initialized - wtf?")
|
|
}
|
|
|
|
now := time.Now()
|
|
fs := &FurcFS{
|
|
RootDir: &RootDir{
|
|
_nodes: make(map[string]TopLevelDir),
|
|
_attr: fuse.Attr{
|
|
Inode: ROOT_INODE,
|
|
Nlink: 1,
|
|
Mode: os.ModeDir | 0500,
|
|
Uid: rootUID,
|
|
Gid: rootGID,
|
|
Atime: now,
|
|
Ctime: now,
|
|
Mtime: now,
|
|
},
|
|
},
|
|
_pounce: furcadia.NewPounceList(),
|
|
}
|
|
|
|
///////////////////////////////////////////////////////////////////////////
|
|
// register root-level items
|
|
///////////////////////////////////////////////////////////////////////////
|
|
|
|
fs.RootDir._nodes["furres"] = NewFurresDir(FURRES_DIR_INODE_BASE, rootUID, rootGID)
|
|
fs.RootDir._nodes["dreams"] = NewDreamsDir(DREAMS_DIR_INODE_BASE, rootUID, rootGID)
|
|
|
|
// FS context is now ready
|
|
G_FS = fs
|
|
return fs
|
|
}
|
|
|
|
func (fs *FurcFS) Root() (fs.Node, error) {
|
|
return fs.RootDir, nil
|
|
}
|