From a1c8dac561bc80cd81459f50e8e17c1e1a081ecc Mon Sep 17 00:00:00 2001 From: Chris Howey Date: Tue, 5 May 2015 18:06:36 -0500 Subject: [PATCH] Add node to build on freebsd. Also note that inode is 32 bit in go freebsd stat struct. Assumed to be 64bit in restic. --- node.go | 4 ++-- node_freebsd.go | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 node_freebsd.go 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()) +}