| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- //go:build freebsd || openbsd || darwin
- // +build freebsd openbsd darwin
- package mountinfo
- import "golang.org/x/sys/unix"
- // parseMountTable returns information about mounted filesystems
- func parseMountTable(filter FilterFunc) ([]*Info, error) {
- count, err := unix.Getfsstat(nil, unix.MNT_WAIT)
- if err != nil {
- return nil, err
- }
- entries := make([]unix.Statfs_t, count)
- _, err = unix.Getfsstat(entries, unix.MNT_WAIT)
- if err != nil {
- return nil, err
- }
- var out []*Info
- for _, entry := range entries {
- var skip, stop bool
- mountinfo := getMountinfo(&entry)
- if filter != nil {
- // filter out entries we're not interested in
- skip, stop = filter(mountinfo)
- if skip {
- continue
- }
- }
- out = append(out, mountinfo)
- if stop {
- break
- }
- }
- return out, nil
- }
- func mounted(path string) (bool, error) {
- path, err := normalizePath(path)
- if err != nil {
- return false, err
- }
- // Fast path: compare st.st_dev fields.
- // This should always work for FreeBSD and OpenBSD.
- mounted, err := mountedByStat(path)
- if err == nil {
- return mounted, nil
- }
- // Fallback to parsing mountinfo
- return mountedByMountinfo(path)
- }
|