mirror of
https://github.com/restic/restic.git
synced 2025-12-26 19:56:43 +00:00
Previously, nodeRestoreTimestamps would do something like
if node.Type == restic.NodeTypeSymlink {
return nodeRestoreSymlinkTimestamps(...)
}
return syscall.UtimesNano(...)
where nodeRestoreSymlinkTimestamps was either a no-op or a
reimplementation of syscall.UtimesNano that handles symlinks, with some
repeated converting between timestamp types. The Linux implementation
was a bit clumsy, requiring three syscalls to set the timestamps.
In this new setup, there is a function utimesNano that has three
implementations:
* on Linux, it's a modified syscall.UtimesNano that uses
AT_SYMLINK_NOFOLLOW and AT_FDCWD so it can handle any type in a single
call;
* on other Unix platforms, it just calls the syscall function after
skipping symlinks;
* on Windows, it's the modified UtimesNano that was previously called
nodeRestoreSymlinkTimestamps, except with different arguments.
24 lines
759 B
Go
24 lines
759 B
Go
package fs
|
|
|
|
import "github.com/restic/restic/internal/restic"
|
|
|
|
// nodeRestoreExtendedAttributes is a no-op on netbsd.
|
|
func nodeRestoreExtendedAttributes(_ *restic.Node, _ string) error {
|
|
return nil
|
|
}
|
|
|
|
// nodeFillExtendedAttributes is a no-op on netbsd.
|
|
func nodeFillExtendedAttributes(_ *restic.Node, _ string, _ bool) error {
|
|
return nil
|
|
}
|
|
|
|
// nodeRestoreGenericAttributes is no-op on netbsd.
|
|
func nodeRestoreGenericAttributes(node *restic.Node, _ string, warn func(msg string)) error {
|
|
return restic.HandleAllUnknownGenericAttributesFound(node.GenericAttributes, warn)
|
|
}
|
|
|
|
// nodeFillGenericAttributes is a no-op on netbsd.
|
|
func nodeFillGenericAttributes(_ *restic.Node, _ string, _ *ExtendedFileInfo) (allowExtended bool, err error) {
|
|
return true, nil
|
|
}
|