forked from TrueCloudLab/restic
Merge pull request #3030 from greatroar/concrete-statt
Replace restic.statT interface by concrete types
This commit is contained in:
commit
6feaf6bd1f
9 changed files with 43 additions and 64 deletions
|
@ -506,7 +506,7 @@ func (node Node) sameExtendedAttributes(other Node) bool {
|
|||
return true
|
||||
}
|
||||
|
||||
func (node *Node) fillUser(stat statT) {
|
||||
func (node *Node) fillUser(stat *statT) {
|
||||
uid, gid := stat.uid(), stat.gid()
|
||||
node.UID, node.GID = uid, gid
|
||||
node.User = lookupUsername(uid)
|
||||
|
@ -644,24 +644,11 @@ func (node *Node) fillExtendedAttributes(path string) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
type statT interface {
|
||||
dev() uint64
|
||||
ino() uint64
|
||||
nlink() uint64
|
||||
uid() uint32
|
||||
gid() uint32
|
||||
rdev() uint64
|
||||
size() int64
|
||||
atim() syscall.Timespec
|
||||
mtim() syscall.Timespec
|
||||
ctim() syscall.Timespec
|
||||
}
|
||||
|
||||
func mkfifo(path string, mode uint32) (err error) {
|
||||
return mknod(path, mode|syscall.S_IFIFO, 0)
|
||||
}
|
||||
|
||||
func (node *Node) fillTimes(stat statT) {
|
||||
func (node *Node) fillTimes(stat *statT) {
|
||||
ctim := stat.ctim()
|
||||
atim := stat.atim()
|
||||
node.ChangeTime = time.Unix(ctim.Unix())
|
||||
|
|
|
@ -10,6 +10,6 @@ func (node Node) device() int {
|
|||
return int(node.Device)
|
||||
}
|
||||
|
||||
func (s statUnix) atim() syscall.Timespec { return s.Atimespec }
|
||||
func (s statUnix) mtim() syscall.Timespec { return s.Mtimespec }
|
||||
func (s statUnix) ctim() syscall.Timespec { return s.Ctimespec }
|
||||
func (s statT) atim() syscall.Timespec { return s.Atimespec }
|
||||
func (s statT) mtim() syscall.Timespec { return s.Mtimespec }
|
||||
func (s statT) ctim() syscall.Timespec { return s.Ctimespec }
|
||||
|
|
|
@ -12,6 +12,6 @@ func (node Node) device() uint64 {
|
|||
return node.Device
|
||||
}
|
||||
|
||||
func (s statUnix) atim() syscall.Timespec { return s.Atimespec }
|
||||
func (s statUnix) mtim() syscall.Timespec { return s.Mtimespec }
|
||||
func (s statUnix) ctim() syscall.Timespec { return s.Ctimespec }
|
||||
func (s statT) atim() syscall.Timespec { return s.Atimespec }
|
||||
func (s statT) mtim() syscall.Timespec { return s.Mtimespec }
|
||||
func (s statT) ctim() syscall.Timespec { return s.Ctimespec }
|
||||
|
|
|
@ -7,7 +7,6 @@ import (
|
|||
"golang.org/x/sys/unix"
|
||||
|
||||
"github.com/restic/restic/internal/errors"
|
||||
|
||||
"github.com/restic/restic/internal/fs"
|
||||
)
|
||||
|
||||
|
@ -36,6 +35,6 @@ func (node Node) device() int {
|
|||
return int(node.Device)
|
||||
}
|
||||
|
||||
func (s statUnix) atim() syscall.Timespec { return s.Atim }
|
||||
func (s statUnix) mtim() syscall.Timespec { return s.Mtim }
|
||||
func (s statUnix) ctim() syscall.Timespec { return s.Ctim }
|
||||
func (s statT) atim() syscall.Timespec { return s.Atim }
|
||||
func (s statT) mtim() syscall.Timespec { return s.Mtim }
|
||||
func (s statT) ctim() syscall.Timespec { return s.Ctim }
|
||||
|
|
|
@ -10,9 +10,9 @@ func (node Node) device() int {
|
|||
return int(node.Device)
|
||||
}
|
||||
|
||||
func (s statUnix) atim() syscall.Timespec { return s.Atimespec }
|
||||
func (s statUnix) mtim() syscall.Timespec { return s.Mtimespec }
|
||||
func (s statUnix) ctim() syscall.Timespec { return s.Ctimespec }
|
||||
func (s statT) atim() syscall.Timespec { return s.Atimespec }
|
||||
func (s statT) mtim() syscall.Timespec { return s.Mtimespec }
|
||||
func (s statT) ctim() syscall.Timespec { return s.Ctimespec }
|
||||
|
||||
// Getxattr retrieves extended attribute data associated with path.
|
||||
func Getxattr(path, name string) ([]byte, error) {
|
||||
|
|
|
@ -10,9 +10,9 @@ func (node Node) device() int {
|
|||
return int(node.Device)
|
||||
}
|
||||
|
||||
func (s statUnix) atim() syscall.Timespec { return s.Atim }
|
||||
func (s statUnix) mtim() syscall.Timespec { return s.Mtim }
|
||||
func (s statUnix) ctim() syscall.Timespec { return s.Ctim }
|
||||
func (s statT) atim() syscall.Timespec { return s.Atim }
|
||||
func (s statT) mtim() syscall.Timespec { return s.Mtim }
|
||||
func (s statT) ctim() syscall.Timespec { return s.Ctim }
|
||||
|
||||
// Getxattr retrieves extended attribute data associated with path.
|
||||
func Getxattr(path, name string) ([]byte, error) {
|
||||
|
|
|
@ -10,9 +10,9 @@ func (node Node) device() int {
|
|||
return int(node.Device)
|
||||
}
|
||||
|
||||
func (s statUnix) atim() syscall.Timespec { return s.Atim }
|
||||
func (s statUnix) mtim() syscall.Timespec { return s.Mtim }
|
||||
func (s statUnix) ctim() syscall.Timespec { return s.Ctim }
|
||||
func (s statT) atim() syscall.Timespec { return s.Atim }
|
||||
func (s statT) mtim() syscall.Timespec { return s.Mtim }
|
||||
func (s statT) ctim() syscall.Timespec { return s.Ctim }
|
||||
|
||||
// Getxattr retrieves extended attribute data associated with path.
|
||||
func Getxattr(path, name string) ([]byte, error) {
|
||||
|
|
|
@ -10,23 +10,20 @@ import (
|
|||
var mknod = syscall.Mknod
|
||||
var lchown = os.Lchown
|
||||
|
||||
type statUnix syscall.Stat_t
|
||||
type statT syscall.Stat_t
|
||||
|
||||
func toStatT(i interface{}) (statT, bool) {
|
||||
if i == nil {
|
||||
return nil, false
|
||||
}
|
||||
func toStatT(i interface{}) (*statT, bool) {
|
||||
s, ok := i.(*syscall.Stat_t)
|
||||
if ok && s != nil {
|
||||
return statUnix(*s), true
|
||||
return (*statT)(s), true
|
||||
}
|
||||
return nil, false
|
||||
}
|
||||
|
||||
func (s statUnix) dev() uint64 { return uint64(s.Dev) }
|
||||
func (s statUnix) ino() uint64 { return uint64(s.Ino) }
|
||||
func (s statUnix) nlink() uint64 { return uint64(s.Nlink) }
|
||||
func (s statUnix) uid() uint32 { return uint32(s.Uid) }
|
||||
func (s statUnix) gid() uint32 { return uint32(s.Gid) }
|
||||
func (s statUnix) rdev() uint64 { return uint64(s.Rdev) }
|
||||
func (s statUnix) size() int64 { return int64(s.Size) }
|
||||
func (s statT) dev() uint64 { return uint64(s.Dev) }
|
||||
func (s statT) ino() uint64 { return uint64(s.Ino) }
|
||||
func (s statT) nlink() uint64 { return uint64(s.Nlink) }
|
||||
func (s statT) uid() uint32 { return uint32(s.Uid) }
|
||||
func (s statT) gid() uint32 { return uint32(s.Gid) }
|
||||
func (s statT) rdev() uint64 { return uint64(s.Rdev) }
|
||||
func (s statT) size() int64 { return int64(s.Size) }
|
||||
|
|
|
@ -42,40 +42,36 @@ func Setxattr(path, name string, data []byte) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
type statWin syscall.Win32FileAttributeData
|
||||
type statT syscall.Win32FileAttributeData
|
||||
|
||||
//ToStatT call the Windows system call Win32FileAttributeData.
|
||||
func toStatT(i interface{}) (statT, bool) {
|
||||
if i == nil {
|
||||
return nil, false
|
||||
}
|
||||
func toStatT(i interface{}) (*statT, bool) {
|
||||
s, ok := i.(*syscall.Win32FileAttributeData)
|
||||
if ok && s != nil {
|
||||
return statWin(*s), true
|
||||
return (*statT)(s), true
|
||||
}
|
||||
return nil, false
|
||||
}
|
||||
|
||||
func (s statWin) dev() uint64 { return 0 }
|
||||
func (s statWin) ino() uint64 { return 0 }
|
||||
func (s statWin) nlink() uint64 { return 0 }
|
||||
func (s statWin) uid() uint32 { return 0 }
|
||||
func (s statWin) gid() uint32 { return 0 }
|
||||
func (s statWin) rdev() uint64 { return 0 }
|
||||
func (s statT) dev() uint64 { return 0 }
|
||||
func (s statT) ino() uint64 { return 0 }
|
||||
func (s statT) nlink() uint64 { return 0 }
|
||||
func (s statT) uid() uint32 { return 0 }
|
||||
func (s statT) gid() uint32 { return 0 }
|
||||
func (s statT) rdev() uint64 { return 0 }
|
||||
|
||||
func (s statWin) size() int64 {
|
||||
func (s statT) size() int64 {
|
||||
return int64(s.FileSizeLow) | (int64(s.FileSizeHigh) << 32)
|
||||
}
|
||||
|
||||
func (s statWin) atim() syscall.Timespec {
|
||||
func (s statT) atim() syscall.Timespec {
|
||||
return syscall.NsecToTimespec(s.LastAccessTime.Nanoseconds())
|
||||
}
|
||||
|
||||
func (s statWin) mtim() syscall.Timespec {
|
||||
func (s statT) mtim() syscall.Timespec {
|
||||
return syscall.NsecToTimespec(s.LastWriteTime.Nanoseconds())
|
||||
}
|
||||
|
||||
func (s statWin) ctim() syscall.Timespec {
|
||||
func (s statT) ctim() syscall.Timespec {
|
||||
// Windows does not have the concept of a "change time" in the sense Unix uses it, so we're using the LastWriteTime here.
|
||||
return syscall.NsecToTimespec(s.LastWriteTime.Nanoseconds())
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue