// +build !windows package contenthash import ( "os" "syscall" "github.com/containerd/continuity/sysx" fstypes "github.com/tonistiigi/fsutil/types" "golang.org/x/sys/unix" ) func setUnixOpt(path string, fi os.FileInfo, stat *fstypes.Stat) error { s := fi.Sys().(*syscall.Stat_t) stat.Uid = s.Uid stat.Gid = s.Gid if !fi.IsDir() { if s.Mode&syscall.S_IFBLK != 0 || s.Mode&syscall.S_IFCHR != 0 { stat.Devmajor = int64(unix.Major(uint64(s.Rdev))) stat.Devminor = int64(unix.Minor(uint64(s.Rdev))) } } attrs, err := sysx.LListxattr(path) if err != nil { return err } if len(attrs) > 0 { stat.Xattrs = map[string][]byte{} for _, attr := range attrs { v, err := sysx.LGetxattr(path, attr) if err == nil { stat.Xattrs[attr] = v } } } return nil }