2
2
mirror of https://github.com/octoleo/restic.git synced 2024-11-19 03:25:19 +00:00

Merge pull request #659 from restic/device-freebsd

fs.DeviceID(): Return errors whehn fi is nil
This commit is contained in:
Alexander Neumann 2016-11-05 13:35:16 +01:00
commit 149c01a86a
2 changed files with 10 additions and 1 deletions

View File

@ -359,7 +359,7 @@ func runBackup(opts BackupOptions, gopts GlobalOptions, args []string) error {
return false return false
} }
if !opts.ExcludeOtherFS { if !opts.ExcludeOtherFS || fi == nil {
return true return true
} }

View File

@ -12,10 +12,19 @@ import (
// DeviceID extracts the device ID from an os.FileInfo object by casting it // DeviceID extracts the device ID from an os.FileInfo object by casting it
// to syscall.Stat_t // to syscall.Stat_t
func DeviceID(fi os.FileInfo) (deviceID uint64, err error) { 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 { if st, ok := fi.Sys().(*syscall.Stat_t); ok {
// st.Dev is uint32 on Darwin and uint64 on Linux. Just cast // st.Dev is uint32 on Darwin and uint64 on Linux. Just cast
// everything to uint64. // everything to uint64.
return uint64(st.Dev), nil return uint64(st.Dev), nil
} }
return 0, errors.New("Could not cast to syscall.Stat_t") return 0, errors.New("Could not cast to syscall.Stat_t")
} }