Files
yatm/internal/executor/fileops/mount_linux.go
T
Samuel Cui 4fef653b71 Prepare YATM v1.0.0-alpha.2
Unify file queries and Scan execution, retain indexed Identical results,
improve Job and Preview workflows, and verify release packaging.
2026-10-05 19:08:49 +08:00

24 lines
756 B
Go

package fileops
import (
"fmt"
"golang.org/x/sys/unix"
)
func sameMount(root, filename string) (bool, error) {
// Device numbers alone cannot distinguish a bind mount of the same filesystem.
var rootStat, fileStat unix.Statx_t
flags := unix.AT_SYMLINK_NOFOLLOW | unix.AT_NO_AUTOMOUNT
if err := unix.Statx(unix.AT_FDCWD, root, flags, unix.STATX_MNT_ID, &rootStat); err != nil {
return false, err
}
if err := unix.Statx(unix.AT_FDCWD, filename, flags, unix.STATX_MNT_ID, &fileStat); err != nil {
return false, err
}
if rootStat.Mask&unix.STATX_MNT_ID == 0 || fileStat.Mask&unix.STATX_MNT_ID == 0 {
return false, fmt.Errorf("filesystem operation requires kernel mount identity support")
}
return rootStat.Mnt_id == fileStat.Mnt_id, nil
}