From abe64d8a299b7528a07d96c9206b27734d28d8c9 Mon Sep 17 00:00:00 2001 From: Alex Yatskov Date: Sat, 9 May 2015 14:01:05 +0900 Subject: [PATCH] Adding stub for mounter --- mount.go | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 mount.go diff --git a/mount.go b/mount.go new file mode 100644 index 0000000..1e64ca1 --- /dev/null +++ b/mount.go @@ -0,0 +1,98 @@ +// Hellofs implements a simple "hello world" file system. +package main + +import ( + "flag" + "fmt" + "os" + + "bazil.org/fuse" + "bazil.org/fuse/fs" + _ "bazil.org/fuse/fs/fstestutil" + "golang.org/x/net/context" +) + +var Usage = func() { + fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0]) + fmt.Fprintf(os.Stderr, " %s MOUNTPOINT\n", os.Args[0]) + flag.PrintDefaults() +} + +// func main() { +// flag.Usage = Usage +// flag.Parse() + +// if flag.NArg() != 1 { +// Usage() +// os.Exit(2) +// } +// mountpoint := flag.Arg(0) + +// c, err := fuse.Mount( +// mountpoint, +// fuse.FSName("helloworld"), +// fuse.Subtype("hellofs"), +// fuse.LocalVolume(), +// fuse.VolumeName("Hello world!"), +// ) +// if err != nil { +// log.Fatal(err) +// } +// defer c.Close() + +// err = fs.Serve(c, FS{}) +// if err != nil { +// log.Fatal(err) +// } + +// // check if the mount process has an error to report +// <-c.Ready +// if err := c.MountError; err != nil { +// log.Fatal(err) +// } +// } + +// FS implements the hello world file system. +type FS struct{} + +func (FS) Root() (fs.Node, error) { + return Dir{}, nil +} + +// Dir implements both Node and Handle for the root directory. +type Dir struct{} + +func (Dir) Attr(a *fuse.Attr) { + a.Inode = 1 + a.Mode = os.ModeDir | 0777 +} + +func (Dir) Lookup(ctx context.Context, name string) (fs.Node, error) { + if name == "hello" { + return File{}, nil + } + return nil, fuse.ENOENT +} + +var dirDirs = []fuse.Dirent{ + {Inode: 2, Name: "hello", Type: fuse.DT_File}, +} + +func (Dir) ReadDirAll(ctx context.Context) ([]fuse.Dirent, error) { + return dirDirs, nil +} + +// File implements both Node and Handle for the hello file. +type File struct{} + +const greeting = "hello, world\n" + +func (File) Attr(a *fuse.Attr) { + a.Inode = 2 + a.Mode = 0777 + a.Size = uint64(len(greeting)) +} + +func (File) ReadAll(ctx context.Context) ([]byte, error) { + return []byte(greeting), nil +}