...

Source file src/github.com/moby/sys/mountinfo/mounted_unix.go

Documentation: github.com/moby/sys/mountinfo

     1  //go:build linux || freebsd || openbsd || darwin
     2  // +build linux freebsd openbsd darwin
     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  		// Device differs from that of parent,
    26  		// so definitely a mount point.
    27  		return true, nil
    28  	}
    29  	// NB: this does not detect bind mounts on Linux.
    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