func (fs *loopbackFileSystem) OpenDir(name string, context *fuse.Context) (stream []fuse.DirEntry, status fuse.Status) { // What other ways beyond O_RDONLY are there to open // directories? f, err := os.Open(fs.GetPath(name)) if err != nil { return nil, fuse.ToStatus(err) } want := 500 output := make([]fuse.DirEntry, 0, want) for { infos, err := f.Readdir(want) for i := range infos { // workaround forhttps://code.google.com/p/go/issues/detail?id=5960 if infos[i] == nil { continue } n := infos[i].Name() d := fuse.DirEntry{ Name: n, } if s := fuse.ToStatT(infos[i]); s != nil { d.Mode = uint32(s.Mode) } else { log.Printf("ReadDir entry %q for %q has no stat info", n, name) } output = append(output, d) } if len(infos) < want || err == io.EOF { break } if err != nil { log.Println("Readdir() returned err:", err) break } } f.Close() return output, fuse.OK }
func (fs *MultiZipFs) OpenDir(name string, context *fuse.Context) (stream []fuse.DirEntry, code fuse.Status) { fs.lock.RLock() defer fs.lock.RUnlock() stream = make([]fuse.DirEntry, 0, len(fs.zips)+2) if name == "" { var d fuse.DirEntry d.Name = "config" d.Mode = fuse.S_IFDIR | 0700 stream = append(stream, fuse.DirEntry(d)) } if name == "config" { for k := range fs.zips { var d fuse.DirEntry d.Name = k d.Mode = fuse.S_IFLNK stream = append(stream, fuse.DirEntry(d)) } } return stream, fuse.OK }