func (n *pathInode) GetAttr(out *fuse.Attr, file nodefs.File, context *fuse.Context) (code fuse.Status) { var fi *fuse.Attr if file == nil { // called on a deleted files. file = n.Inode().AnyFile() } if file != nil { code = file.GetAttr(out) } if file == nil || code == fuse.ENOSYS || code == fuse.EBADF { fi, code = n.fs.GetAttr(n.GetPath(), context) } if fi != nil { n.setClientInode(fi.Ino) } if fi != nil && !fi.IsDir() && fi.Nlink == 0 { fi.Nlink = 1 } if fi != nil { *out = *fi } return code }
func (n *defaultNode) GetAttr(out *fuse.Attr, file File, context *fuse.Context) (code fuse.Status) { if n.Inode().IsDir() { out.Mode = fuse.S_IFDIR | 0755 } else { out.Mode = fuse.S_IFREG | 0644 } return fuse.OK }
func (f *loopbackFile) GetAttr(a *fuse.Attr) fuse.Status { st := syscall.Stat_t{} f.lock.Lock() err := syscall.Fstat(int(f.File.Fd()), &st) f.lock.Unlock() if err != nil { return fuse.ToStatus(err) } a.FromStat(&st) return fuse.OK }
func (fs *FSetAttrFs) GetAttr(name string, context *fuse.Context) (*fuse.Attr, fuse.Status) { if name == "" { return &fuse.Attr{Mode: fuse.S_IFDIR | 0700}, fuse.OK } if name == "file" && fs.file != nil { var a fuse.Attr fs.file.getAttr(&a) a.Mode |= fuse.S_IFREG return &a, fuse.OK } return nil, fuse.ENOENT }
func (fs *unionFsFile) GetAttr(out *fuse.Attr) fuse.Status { code := fs.File.GetAttr(out) if code.Ok() { out.Mode |= 0200 } return code }
func (n *memNode) GetAttr(out *fuse.Attr, file nodefs.File, context *fuse.Context) fuse.Status { if n.Inode().IsDir() { out.Mode = fuse.S_IFDIR | 0777 return fuse.OK } n.file.Stat(out) return fuse.OK }
func (c *FileSystemConnector) lookupMountUpdate(out *fuse.Attr, mount *fileSystemMount) (node *Inode, code fuse.Status) { code = mount.mountInode.Node().GetAttr(out, nil, nil) if !code.Ok() { log.Println("Root getattr should not return error", code) out.Mode = fuse.S_IFDIR | 0755 return mount.mountInode, fuse.OK } return mount.mountInode, fuse.OK }
func (fs *unionFS) Create(name string, flags uint32, mode uint32, context *fuse.Context) (fuseFile nodefs.File, code fuse.Status) { writable := fs.fileSystems[0] code = fs.promoteDirsTo(name) if code != fuse.OK { return nil, code } fuseFile, code = writable.Create(name, flags, mode, context) if code.Ok() { fuseFile = fs.newUnionFsFile(fuseFile, 0) fs.removeDeletion(name) now := time.Now() a := fuse.Attr{ Mode: fuse.S_IFREG | mode, } a.SetTimes(nil, &now, &now) fs.branchCache.Set(name, branchResult{&a, fuse.OK, 0}) } return fuseFile, code }
func HeaderToFileInfo(out *fuse.Attr, h *tar.Header) { out.Mode = uint32(h.Mode) out.Size = uint64(h.Size) out.Uid = uint32(h.Uid) out.Gid = uint32(h.Gid) out.SetTimes(&h.AccessTime, &h.ModTime, &h.ChangeTime) }
func (n *pathInode) findChild(fi *fuse.Attr, name string, fullPath string) (out *pathInode) { if fi.Ino > 0 { unlock := n.RLockTree() v := n.pathFs.clientInodeMap[fi.Ino] if len(v) > 0 { out = v[0].node if fi.Nlink == 1 { log.Println("Found linked inode, but Nlink == 1", fullPath) } } unlock() } if out == nil { out = n.createChild(name, fi.IsDir()) out.clientInode = fi.Ino n.addChild(name, out) } else { // should add 'out' as a child to n ? } return out }
func (f *dataFile) GetAttr(out *fuse.Attr) fuse.Status { out.Mode = fuse.S_IFREG | 0644 out.Size = uint64(len(f.data)) return fuse.OK }
func (f *TarFile) Stat(out *fuse.Attr) { HeaderToFileInfo(out, &f.Header) out.Mode |= syscall.S_IFREG }
func (n *nodeReadNode) Lookup(out *fuse.Attr, name string, context *fuse.Context) (*Inode, fuse.Status) { out.Mode = fuse.S_IFREG | 0644 out.Size = uint64(len(name)) ch := n.Inode().NewChild(name, false, newNodeReadNode([]byte(name))) return ch, fuse.OK }
func (m *fileSystemMount) setOwner(attr *fuse.Attr) { if m.options.Owner != nil { attr.Owner = *(*fuse.Owner)(m.options.Owner) } }
func (f *dataFile) GetAttr(out *fuse.Attr) fuse.Status { log.Print("dataFile.GetAttr()", " ", out) out.Mode = fuse.S_IFREG | 0775 out.Size = uint64(len(f.data)) return fuse.OK }
func (f *MutableDataFile) getAttr(out *fuse.Attr) { *out = f.Attr out.Size = uint64(len(f.data)) }
func (f *ZipFile) Stat(out *fuse.Attr) { // TODO - do something intelligent with timestamps. out.Mode = fuse.S_IFREG | 0444 out.Size = uint64(f.File.UncompressedSize) }