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
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (node *Node) fillUser(stat statT) {
|
func (node *Node) fillUser(stat *statT) {
|
||||||
uid, gid := stat.uid(), stat.gid()
|
uid, gid := stat.uid(), stat.gid()
|
||||||
node.UID, node.GID = uid, gid
|
node.UID, node.GID = uid, gid
|
||||||
node.User = lookupUsername(uid)
|
node.User = lookupUsername(uid)
|
||||||
|
@ -644,24 +644,11 @@ func (node *Node) fillExtendedAttributes(path string) error {
|
||||||
return nil
|
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) {
|
func mkfifo(path string, mode uint32) (err error) {
|
||||||
return mknod(path, mode|syscall.S_IFIFO, 0)
|
return mknod(path, mode|syscall.S_IFIFO, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (node *Node) fillTimes(stat statT) {
|
func (node *Node) fillTimes(stat *statT) {
|
||||||
ctim := stat.ctim()
|
ctim := stat.ctim()
|
||||||
atim := stat.atim()
|
atim := stat.atim()
|
||||||
node.ChangeTime = time.Unix(ctim.Unix())
|
node.ChangeTime = time.Unix(ctim.Unix())
|
||||||
|
|
|
@ -10,6 +10,6 @@ func (node Node) device() int {
|
||||||
return int(node.Device)
|
return int(node.Device)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s statUnix) atim() syscall.Timespec { return s.Atimespec }
|
func (s statT) atim() syscall.Timespec { return s.Atimespec }
|
||||||
func (s statUnix) mtim() syscall.Timespec { return s.Mtimespec }
|
func (s statT) mtim() syscall.Timespec { return s.Mtimespec }
|
||||||
func (s statUnix) ctim() syscall.Timespec { return s.Ctimespec }
|
func (s statT) ctim() syscall.Timespec { return s.Ctimespec }
|
||||||
|
|
|
@ -12,6 +12,6 @@ func (node Node) device() uint64 {
|
||||||
return node.Device
|
return node.Device
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s statUnix) atim() syscall.Timespec { return s.Atimespec }
|
func (s statT) atim() syscall.Timespec { return s.Atimespec }
|
||||||
func (s statUnix) mtim() syscall.Timespec { return s.Mtimespec }
|
func (s statT) mtim() syscall.Timespec { return s.Mtimespec }
|
||||||
func (s statUnix) ctim() syscall.Timespec { return s.Ctimespec }
|
func (s statT) ctim() syscall.Timespec { return s.Ctimespec }
|
||||||
|
|
|
@ -7,7 +7,6 @@ import (
|
||||||
"golang.org/x/sys/unix"
|
"golang.org/x/sys/unix"
|
||||||
|
|
||||||
"github.com/restic/restic/internal/errors"
|
"github.com/restic/restic/internal/errors"
|
||||||
|
|
||||||
"github.com/restic/restic/internal/fs"
|
"github.com/restic/restic/internal/fs"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -36,6 +35,6 @@ func (node Node) device() int {
|
||||||
return int(node.Device)
|
return int(node.Device)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s statUnix) atim() syscall.Timespec { return s.Atim }
|
func (s statT) atim() syscall.Timespec { return s.Atim }
|
||||||
func (s statUnix) mtim() syscall.Timespec { return s.Mtim }
|
func (s statT) mtim() syscall.Timespec { return s.Mtim }
|
||||||
func (s statUnix) ctim() syscall.Timespec { return s.Ctim }
|
func (s statT) ctim() syscall.Timespec { return s.Ctim }
|
||||||
|
|
|
@ -10,9 +10,9 @@ func (node Node) device() int {
|
||||||
return int(node.Device)
|
return int(node.Device)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s statUnix) atim() syscall.Timespec { return s.Atimespec }
|
func (s statT) atim() syscall.Timespec { return s.Atimespec }
|
||||||
func (s statUnix) mtim() syscall.Timespec { return s.Mtimespec }
|
func (s statT) mtim() syscall.Timespec { return s.Mtimespec }
|
||||||
func (s statUnix) ctim() syscall.Timespec { return s.Ctimespec }
|
func (s statT) ctim() syscall.Timespec { return s.Ctimespec }
|
||||||
|
|
||||||
// Getxattr retrieves extended attribute data associated with path.
|
// Getxattr retrieves extended attribute data associated with path.
|
||||||
func Getxattr(path, name string) ([]byte, error) {
|
func Getxattr(path, name string) ([]byte, error) {
|
||||||
|
|
|
@ -10,9 +10,9 @@ func (node Node) device() int {
|
||||||
return int(node.Device)
|
return int(node.Device)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s statUnix) atim() syscall.Timespec { return s.Atim }
|
func (s statT) atim() syscall.Timespec { return s.Atim }
|
||||||
func (s statUnix) mtim() syscall.Timespec { return s.Mtim }
|
func (s statT) mtim() syscall.Timespec { return s.Mtim }
|
||||||
func (s statUnix) ctim() syscall.Timespec { return s.Ctim }
|
func (s statT) ctim() syscall.Timespec { return s.Ctim }
|
||||||
|
|
||||||
// Getxattr retrieves extended attribute data associated with path.
|
// Getxattr retrieves extended attribute data associated with path.
|
||||||
func Getxattr(path, name string) ([]byte, error) {
|
func Getxattr(path, name string) ([]byte, error) {
|
||||||
|
|
|
@ -10,9 +10,9 @@ func (node Node) device() int {
|
||||||
return int(node.Device)
|
return int(node.Device)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s statUnix) atim() syscall.Timespec { return s.Atim }
|
func (s statT) atim() syscall.Timespec { return s.Atim }
|
||||||
func (s statUnix) mtim() syscall.Timespec { return s.Mtim }
|
func (s statT) mtim() syscall.Timespec { return s.Mtim }
|
||||||
func (s statUnix) ctim() syscall.Timespec { return s.Ctim }
|
func (s statT) ctim() syscall.Timespec { return s.Ctim }
|
||||||
|
|
||||||
// Getxattr retrieves extended attribute data associated with path.
|
// Getxattr retrieves extended attribute data associated with path.
|
||||||
func Getxattr(path, name string) ([]byte, error) {
|
func Getxattr(path, name string) ([]byte, error) {
|
||||||
|
|
|
@ -10,23 +10,20 @@ import (
|
||||||
var mknod = syscall.Mknod
|
var mknod = syscall.Mknod
|
||||||
var lchown = os.Lchown
|
var lchown = os.Lchown
|
||||||
|
|
||||||
type statUnix syscall.Stat_t
|
type statT syscall.Stat_t
|
||||||
|
|
||||||
func toStatT(i interface{}) (statT, bool) {
|
func toStatT(i interface{}) (*statT, bool) {
|
||||||
if i == nil {
|
|
||||||
return nil, false
|
|
||||||
}
|
|
||||||
s, ok := i.(*syscall.Stat_t)
|
s, ok := i.(*syscall.Stat_t)
|
||||||
if ok && s != nil {
|
if ok && s != nil {
|
||||||
return statUnix(*s), true
|
return (*statT)(s), true
|
||||||
}
|
}
|
||||||
return nil, false
|
return nil, false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s statUnix) dev() uint64 { return uint64(s.Dev) }
|
func (s statT) dev() uint64 { return uint64(s.Dev) }
|
||||||
func (s statUnix) ino() uint64 { return uint64(s.Ino) }
|
func (s statT) ino() uint64 { return uint64(s.Ino) }
|
||||||
func (s statUnix) nlink() uint64 { return uint64(s.Nlink) }
|
func (s statT) nlink() uint64 { return uint64(s.Nlink) }
|
||||||
func (s statUnix) uid() uint32 { return uint32(s.Uid) }
|
func (s statT) uid() uint32 { return uint32(s.Uid) }
|
||||||
func (s statUnix) gid() uint32 { return uint32(s.Gid) }
|
func (s statT) gid() uint32 { return uint32(s.Gid) }
|
||||||
func (s statUnix) rdev() uint64 { return uint64(s.Rdev) }
|
func (s statT) rdev() uint64 { return uint64(s.Rdev) }
|
||||||
func (s statUnix) size() int64 { return int64(s.Size) }
|
func (s statT) size() int64 { return int64(s.Size) }
|
||||||
|
|
|
@ -42,40 +42,36 @@ func Setxattr(path, name string, data []byte) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type statWin syscall.Win32FileAttributeData
|
type statT syscall.Win32FileAttributeData
|
||||||
|
|
||||||
//ToStatT call the Windows system call Win32FileAttributeData.
|
func toStatT(i interface{}) (*statT, bool) {
|
||||||
func toStatT(i interface{}) (statT, bool) {
|
|
||||||
if i == nil {
|
|
||||||
return nil, false
|
|
||||||
}
|
|
||||||
s, ok := i.(*syscall.Win32FileAttributeData)
|
s, ok := i.(*syscall.Win32FileAttributeData)
|
||||||
if ok && s != nil {
|
if ok && s != nil {
|
||||||
return statWin(*s), true
|
return (*statT)(s), true
|
||||||
}
|
}
|
||||||
return nil, false
|
return nil, false
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s statWin) dev() uint64 { return 0 }
|
func (s statT) dev() uint64 { return 0 }
|
||||||
func (s statWin) ino() uint64 { return 0 }
|
func (s statT) ino() uint64 { return 0 }
|
||||||
func (s statWin) nlink() uint64 { return 0 }
|
func (s statT) nlink() uint64 { return 0 }
|
||||||
func (s statWin) uid() uint32 { return 0 }
|
func (s statT) uid() uint32 { return 0 }
|
||||||
func (s statWin) gid() uint32 { return 0 }
|
func (s statT) gid() uint32 { return 0 }
|
||||||
func (s statWin) rdev() uint64 { 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)
|
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())
|
return syscall.NsecToTimespec(s.LastAccessTime.Nanoseconds())
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s statWin) mtim() syscall.Timespec {
|
func (s statT) mtim() syscall.Timespec {
|
||||||
return syscall.NsecToTimespec(s.LastWriteTime.Nanoseconds())
|
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.
|
// 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())
|
return syscall.NsecToTimespec(s.LastWriteTime.Nanoseconds())
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue