mirror of
https://github.com/moby/moby.git
synced 2026-01-11 18:51:37 +00:00
These comments were added to enforce using the correct import path for
our packages ("github.com/docker/docker", not "github.com/moby/moby").
However, when working in go module mode (not GOPATH / vendor), they have
no effect, so their impact is limited.
Remove these imports in preparation of migrating our code to become an
actual go module.
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
49 lines
1.3 KiB
Go
49 lines
1.3 KiB
Go
package system
|
|
|
|
import (
|
|
"os"
|
|
"syscall"
|
|
"time"
|
|
"unsafe"
|
|
)
|
|
|
|
// Used by Chtimes
|
|
var unixEpochTime, unixMaxTime time.Time
|
|
|
|
func init() {
|
|
unixEpochTime = time.Unix(0, 0)
|
|
if unsafe.Sizeof(syscall.Timespec{}.Nsec) == 8 {
|
|
// This is a 64 bit timespec
|
|
// os.Chtimes limits time to the following
|
|
//
|
|
// Note that this intentionally sets nsec (not sec), which sets both sec
|
|
// and nsec internally in time.Unix();
|
|
// https://github.com/golang/go/blob/go1.19.2/src/time/time.go#L1364-L1380
|
|
unixMaxTime = time.Unix(0, 1<<63-1)
|
|
} else {
|
|
// This is a 32 bit timespec
|
|
unixMaxTime = time.Unix(1<<31-1, 0)
|
|
}
|
|
}
|
|
|
|
// Chtimes changes the access time and modified time of a file at the given path.
|
|
// If the modified time is prior to the Unix Epoch (unixMinTime), or after the
|
|
// end of Unix Time (unixEpochTime), os.Chtimes has undefined behavior. In this
|
|
// case, Chtimes defaults to Unix Epoch, just in case.
|
|
func Chtimes(name string, atime time.Time, mtime time.Time) error {
|
|
if atime.Before(unixEpochTime) || atime.After(unixMaxTime) {
|
|
atime = unixEpochTime
|
|
}
|
|
|
|
if mtime.Before(unixEpochTime) || mtime.After(unixMaxTime) {
|
|
mtime = unixEpochTime
|
|
}
|
|
|
|
if err := os.Chtimes(name, atime, mtime); err != nil {
|
|
return err
|
|
}
|
|
|
|
// Take platform specific action for setting create time.
|
|
return setCTime(name, mtime)
|
|
}
|