...
1
2
3
4 package mountinfo
5
6 import (
7 "os"
8 "path/filepath"
9
10 "golang.org/x/sys/unix"
11 )
12
13 func mountedByStat(path string) (bool, error) {
14 var st unix.Stat_t
15
16 if err := unix.Lstat(path, &st); err != nil {
17 return false, &os.PathError{Op: "stat", Path: path, Err: err}
18 }
19 dev := st.Dev
20 parent := filepath.Dir(path)
21 if err := unix.Lstat(parent, &st); err != nil {
22 return false, &os.PathError{Op: "stat", Path: parent, Err: err}
23 }
24 if dev != st.Dev {
25
26
27 return true, nil
28 }
29
30 return false, nil
31 }
32
33 func normalizePath(path string) (realPath string, err error) {
34 if realPath, err = filepath.Abs(path); err != nil {
35 return "", err
36 }
37 if realPath, err = filepath.EvalSymlinks(realPath); err != nil {
38 return "", err
39 }
40 if _, err := os.Stat(realPath); err != nil {
41 return "", err
42 }
43 return realPath, nil
44 }
45
46 func mountedByMountinfo(path string) (bool, error) {
47 entries, err := GetMounts(SingleEntryFilter(path))
48 if err != nil {
49 return false, err
50 }
51
52 return len(entries) > 0, nil
53 }
54
View as plain text