diff --git a/node.go b/node.go index 8f1ce8de5..c39bc4941 100644 --- a/node.go +++ b/node.go @@ -341,7 +341,7 @@ func (node *Node) isNewer(path string, fi os.FileInfo) bool { if node.ModTime != fi.ModTime() || node.ChangeTime != changeTime(extendedStat) || - node.Inode != inode || + node.Inode != uint64(inode) || node.Size != size { debug.Log("node.isNewer", "node %v is newer: timestamp, size or inode changed", path) return true @@ -396,7 +396,7 @@ func (node *Node) fillExtra(path string, fi os.FileInfo) error { return nil } - node.Inode = stat.Ino + node.Inode = uint64(stat.Ino) node.fillTimes(stat) diff --git a/node_freebsd.go b/node_freebsd.go new file mode 100644 index 000000000..31c0329aa --- /dev/null +++ b/node_freebsd.go @@ -0,0 +1,24 @@ +package restic + +import ( + "os" + "syscall" + "time" +) + +func (node *Node) OpenForReading() (*os.File, error) { + file, err := os.OpenFile(node.path, os.O_RDONLY, 0) + if os.IsPermission(err) { + return os.OpenFile(node.path, os.O_RDONLY, 0) + } + return file, err +} + +func (node *Node) fillTimes(stat *syscall.Stat_t) { + node.ChangeTime = time.Unix(stat.Ctimespec.Unix()) + node.AccessTime = time.Unix(stat.Atimespec.Unix()) +} + +func changeTime(stat *syscall.Stat_t) time.Time { + return time.Unix(stat.Ctimespec.Unix()) +}