mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-11-04 18:13:42 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			57 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
//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)
 | 
						|
}
 |