Added FUSE support #55
							
								
								
									
										10
									
								
								fuse.go
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								fuse.go
									
									
									
									
									
								
							@@ -12,7 +12,15 @@ import (
 | 
				
			|||||||
func startFUSE(ctx context.Context, dev *infinitime.Device) error {
 | 
					func startFUSE(ctx context.Context, dev *infinitime.Device) error {
 | 
				
			||||||
	// This is where we'll mount the FS
 | 
						// This is where we'll mount the FS
 | 
				
			||||||
	os.Mkdir(k.String("fuse.mountpoint"), 0755)
 | 
						os.Mkdir(k.String("fuse.mountpoint"), 0755)
 | 
				
			||||||
	root := fusefs.BuildRootNode(dev)
 | 
						root, err := fusefs.BuildRootNode(dev)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							log.Error("Building root node failed").
 | 
				
			||||||
 | 
								Err(err).
 | 
				
			||||||
 | 
								Send()
 | 
				
			||||||
 | 
								return err
 | 
				
			||||||
 | 
							return err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	server, err := fs.Mount(k.String("fuse.mountpoint"), root, &fs.Options{
 | 
						server, err := fs.Mount(k.String("fuse.mountpoint"), root, &fs.Options{
 | 
				
			||||||
		MountOptions: fuse.MountOptions{
 | 
							MountOptions: fuse.MountOptions{
 | 
				
			||||||
			// Set to true to see how the file system works.
 | 
								// Set to true to see how the file system works.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -39,11 +39,16 @@ type ITNode struct {
 | 
				
			|||||||
var myfs *blefs.FS = nil
 | 
					var myfs *blefs.FS = nil
 | 
				
			||||||
var inodemap map[string]uint64 = nil
 | 
					var inodemap map[string]uint64 = nil
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func BuildRootNode(dev *infinitime.Device) *ITNode {
 | 
					func BuildRootNode(dev *infinitime.Device) (*ITNode, error) {
 | 
				
			||||||
 | 
						var err error
 | 
				
			||||||
	inodemap = make(map[string]uint64)
 | 
						inodemap = make(map[string]uint64)
 | 
				
			||||||
	myfs, _ = dev.FS()
 | 
						myfs, err = dev.FS()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							log.Error("FUSE failed to get filesystem").Err(err).Send()
 | 
				
			||||||
 | 
							return nil, err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return &ITNode{kind: 0}
 | 
						return &ITNode{kind: 0}, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var properties = make([]ITProperty, 6)
 | 
					var properties = make([]ITProperty, 6)
 | 
				
			||||||
@@ -118,12 +123,21 @@ func (n *ITNode) Readdir(ctx context.Context) (fs.DirStream, syscall.Errno) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	case 2:
 | 
						case 2:
 | 
				
			||||||
		// on device
 | 
							// on device
 | 
				
			||||||
		files, _ := myfs.ReadDir(n.path)
 | 
							files, err := myfs.ReadDir(n.path)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								log.Error("ReadDir failed").Str("path", n.path).Err(err).Send()
 | 
				
			||||||
 | 
								return nil, syscall.ENOENT
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		log.Info("readdir").Str("path", n.path).Int("objects", len(files)).Send()
 | 
							log.Info("readdir").Str("path", n.path).Int("objects", len(files)).Send()
 | 
				
			||||||
		r := make([]fuse.DirEntry, len(files))
 | 
							r := make([]fuse.DirEntry, len(files))
 | 
				
			||||||
		n.lst = make([]DirEntry, len(files))
 | 
							n.lst = make([]DirEntry, len(files))
 | 
				
			||||||
		for ind, entry := range files {
 | 
							for ind, entry := range files {
 | 
				
			||||||
			info, _ := entry.Info()
 | 
								info, err := entry.Info()
 | 
				
			||||||
 | 
								if err != nil {
 | 
				
			||||||
 | 
									log.Error("Info failed").Str("path", n.path).Err(err).Send()
 | 
				
			||||||
 | 
									return nil, syscall.ENOENT
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
			name := info.Name()
 | 
								name := info.Name()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			file := DirEntry{
 | 
								file := DirEntry{
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user