mirror of
https://github.com/podman-container-tools/podman.git
synced 2026-10-12 08:57:42 +00:00
42 lines
828 B
Go
42 lines
828 B
Go
package archive
|
|
|
|
import (
|
|
"syscall"
|
|
"time"
|
|
"unsafe"
|
|
)
|
|
|
|
var (
|
|
minTime = time.Unix(0, 0)
|
|
maxTime time.Time
|
|
)
|
|
|
|
func init() {
|
|
if unsafe.Sizeof(syscall.Timespec{}.Nsec) == 8 {
|
|
// This is a 64 bit timespec
|
|
// os.Chtimes limits time to the following
|
|
maxTime = time.Unix(0, 1<<63-1)
|
|
} else {
|
|
// This is a 32 bit timespec
|
|
maxTime = time.Unix(1<<31-1, 0)
|
|
}
|
|
}
|
|
|
|
// boundTime returns t if it falls within the range supported by os.Chtimes.
|
|
// Times before the Unix epoch (minTime) or after the end of Unix time
|
|
// (maxTime) are replaced with minTime, as os.Chtimes has undefined behavior
|
|
// outside that range.
|
|
func boundTime(t time.Time) time.Time {
|
|
if t.Before(minTime) || t.After(maxTime) {
|
|
return minTime
|
|
}
|
|
|
|
return t
|
|
}
|
|
|
|
func latestTime(t1, t2 time.Time) time.Time {
|
|
if t1.Before(t2) {
|
|
return t2
|
|
}
|
|
return t1
|
|
}
|