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 *fileNode) GetAttr(out *fuse.Attr, file fuse.File, context *fuse.Context) (code fuse.Status) { if file != nil { return file.GetAttr(out) } out.Mode = fuse.S_IFREG | 0644 f := n.File() if n.backing != "" { fi, err := os.Stat(n.backing) if err != nil { return fuse.ToStatus(err) } out.Size = uint64(fi.Size()) t := f.Mtime() if n.dirty { t = fi.ModTime() } out.SetTimes(&t, &t, &t) } else if f != nil { out.Size = uint64(f.filesize) t := f.Mtime() out.SetTimes(&t, &t, &t) } return fuse.OK }
func (n *mtpNodeImpl) GetAttr(out *fuse.Attr, file nodefs.File, context *fuse.Context) (code fuse.Status) { out.Mode = fuse.S_IFREG | 0644 f := n.obj if f != nil { out.Size = uint64(n.Size) t := f.ModificationDate out.SetTimes(&t, &t, &t) } return fuse.OK }
func (dn *DirNode) GetAttr( out *fuse.Attr, file nodefs.File, context *fuse.Context) (code fuse.Status) { out.Mode = 0755 | syscall.S_IFDIR out.Nlink = 2 out.Size = 1 out.Uid = dn.owner.Uid out.Gid = dn.owner.Gid out.SetTimes(&dn.time, &dn.time, &dn.time) return fuse.OK }
func (tn *ThreadNode) GetAttr( out *fuse.Attr, file nodefs.File, context *fuse.Context) (code fuse.Status) { out.Mode = 0755 | syscall.S_IFDIR out.Nlink = 1 owner := getDefaultOwner() out.Uid = owner.Uid out.Gid = owner.Gid out.Size = uint64(tn.thread.Size()) t := tn.thread.Time() out.SetTimes(&t, &t, &t) return fuse.OK }
func (me *UnionFs) Create(name string, flags uint32, mode uint32, context *fuse.Context) (fuseFile fuse.File, code fuse.Status) { writable := me.fileSystems[0] code = me.promoteDirsTo(name) if code != fuse.OK { return nil, code } fuseFile, code = writable.Create(name, flags, mode, context) if code.Ok() { fuseFile = me.newUnionFsFile(fuseFile, 0) me.removeDeletion(name) now := time.Now() a := fuse.Attr{ Mode: fuse.S_IFREG | mode, } a.SetTimes(nil, &now, &now) me.branchCache.Set(name, branchResult{&a, fuse.OK, 0}) } return fuseFile, code }
func (gitfs *GitFs) getGitAttrByPath(repoPath string, path string) (*fuse.Attr, fuse.Status) { repo, _, _, tree, err := gitfs.getMasterTreeFromRepo(repoPath) if err != nil { return nil, fuse.EPERM } repoInfo, err := os.Stat(repoPath) if err != nil { gitfs.logger.Debugf("Failed to Stat %s due to %s", repoPath, err) return nil, fuse.ToStatus(err) } if path == "" { attr := fuse.ToAttr(repoInfo) attr.Mode &= ^uint32(0222) attr.Nlink = 2 + gitfs.treeEntryCount(tree, repoPath) return attr, fuse.OK } entry, err := tree.EntryByPath(path) if err != nil { gitfs.logger.Debugf("Cannot find path %s from tree %s of Git Repository %s due to %s", path, tree.Id().String(), repoPath, err) return nil, fuse.ENOENT } gitfs.logger.Debugf("Found path %s from tree %s of Git Repository %s", path, tree.Id().String(), repoPath) var attr fuse.Attr attr.Mode = toFileMode(entry.Filemode) if stat, ok := repoInfo.Sys().(*syscall.Stat_t); ok { attr.Uid = stat.Uid attr.Gid = stat.Gid attr.Blksize = uint32(stat.Blksize) attr.Rdev = uint32(stat.Rdev) } attr.Ino = crc64.Checksum(entry.Id[:], crc64.MakeTable(crc64.ECMA)) now := time.Now() attr.SetTimes(&now, &now, &now) switch entry.Type { case libgit2.ObjectTree: tree, err := repo.LookupTree(entry.Id) if err != nil { gitfs.logger.Errorf("Failed to find tree %s from Git Repository %s", entry.Id, repoPath) return nil, fuse.EPERM } defer tree.Free() gitfs.logger.Debugf("Found tree %s of Git Repository %s", tree.Id().String(), repoPath) attr.Size = 4096 attr.Nlink = 2 + gitfs.treeEntryCount(tree, repoPath) case libgit2.ObjectBlob: blob, err := repo.LookupBlob(entry.Id) if err != nil { gitfs.logger.Errorf("Failed to find blob %s from Git Repository %s", entry.Id, repoPath) return nil, fuse.EPERM } defer blob.Free() gitfs.logger.Debugf("Found blob %s of Git Repository %s", blob.Id().String(), repoPath) attr.Nlink = 1 attr.Size = uint64(blob.Size()) default: gitfs.logger.Debugf("GetAttr: Unsupported object type %s of %s from Git Repository %s", entry.Type.String(), entry.Id, repoPath) return nil, fuse.ENOENT } attr.Blocks = (attr.Size + 511) / 512 return &attr, fuse.OK }