restic/internal/fs/deviceid_unix.go

32 lines
694 B
Go
Raw Normal View History

2022-03-28 20:23:47 +00:00
//go:build !windows
// +build !windows
package fs
import (
"os"
"syscall"
2017-07-23 12:21:03 +00:00
"github.com/restic/restic/internal/errors"
)
2024-08-27 12:35:10 +00:00
// deviceID extracts the device ID from an os.FileInfo object by casting it
// to syscall.Stat_t
2024-08-27 12:35:10 +00:00
func deviceID(fi os.FileInfo) (deviceID uint64, err error) {
if fi == nil {
return 0, errors.New("unable to determine device: fi is nil")
}
if fi.Sys() == nil {
return 0, errors.New("unable to determine device: fi.Sys() is nil")
}
if st, ok := fi.Sys().(*syscall.Stat_t); ok {
// st.Dev is uint32 on Darwin and uint64 on Linux. Just cast
// everything to uint64.
return uint64(st.Dev), nil
}
return 0, errors.New("Could not cast to syscall.Stat_t")
}