...
1
2
3
4
19
20 package fs
21
22 import (
23 "bytes"
24 "fmt"
25 "os"
26 "syscall"
27
28 "github.com/containerd/continuity/sysx"
29 )
30
31
32
33
34 func detectDirDiff(upper, lower string) *diffDirOptions {
35
36
37
38 return nil
39 }
40
41
42
43
44 func compareSysStat(s1, s2 interface{}) (bool, error) {
45 ls1, ok := s1.(*syscall.Stat_t)
46 if !ok {
47 return false, nil
48 }
49 ls2, ok := s2.(*syscall.Stat_t)
50 if !ok {
51 return false, nil
52 }
53
54 return ls1.Mode == ls2.Mode && ls1.Uid == ls2.Uid && ls1.Gid == ls2.Gid && ls1.Rdev == ls2.Rdev, nil
55 }
56
57 func compareCapabilities(p1, p2 string) (bool, error) {
58 c1, err := sysx.LGetxattr(p1, "security.capability")
59 if err != nil && err != sysx.ENODATA {
60 return false, fmt.Errorf("failed to get xattr for %s: %w", p1, err)
61 }
62 c2, err := sysx.LGetxattr(p2, "security.capability")
63 if err != nil && err != sysx.ENODATA {
64 return false, fmt.Errorf("failed to get xattr for %s: %w", p2, err)
65 }
66 return bytes.Equal(c1, c2), nil
67 }
68
69 func isLinked(f os.FileInfo) bool {
70 s, ok := f.Sys().(*syscall.Stat_t)
71 if !ok {
72 return false
73 }
74 return !f.IsDir() && s.Nlink > 1
75 }
76
View as plain text