pkg/system: rename maxTime and re-use, define unixEpochTime, update GoDoc
This more closely matches to how it's used everywhere. Also move the comment describing "what" ChTimes() does inside its GoDoc. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
parent
2c9684e35c
commit
0b8444aa0c
4 changed files with 18 additions and 27 deletions
|
@ -8,9 +8,10 @@ import (
|
|||
)
|
||||
|
||||
// Used by Chtimes
|
||||
var maxTime time.Time
|
||||
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
|
||||
|
@ -18,28 +19,24 @@ func init() {
|
|||
// 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
|
||||
maxTime = time.Unix(0, 1<<63-1)
|
||||
unixMaxTime = time.Unix(0, 1<<63-1)
|
||||
} else {
|
||||
// This is a 32 bit timespec
|
||||
maxTime = time.Unix(1<<31-1, 0)
|
||||
unixMaxTime = time.Unix(1<<31-1, 0)
|
||||
}
|
||||
}
|
||||
|
||||
// Chtimes changes the access time and modified time of a file at the given path
|
||||
// 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 {
|
||||
unixMinTime := time.Unix(0, 0)
|
||||
unixMaxTime := maxTime
|
||||
|
||||
// If the modified time is prior to the Unix Epoch, or after the
|
||||
// end of Unix Time, os.Chtimes has undefined behavior
|
||||
// default to Unix Epoch in this case, just in case
|
||||
|
||||
if atime.Before(unixMinTime) || atime.After(unixMaxTime) {
|
||||
atime = unixMinTime
|
||||
if atime.Before(unixEpochTime) || atime.After(unixMaxTime) {
|
||||
atime = unixEpochTime
|
||||
}
|
||||
|
||||
if mtime.Before(unixMinTime) || mtime.After(unixMaxTime) {
|
||||
mtime = unixMinTime
|
||||
if mtime.Before(unixEpochTime) || mtime.After(unixMaxTime) {
|
||||
mtime = unixEpochTime
|
||||
}
|
||||
|
||||
if err := os.Chtimes(name, atime, mtime); err != nil {
|
||||
|
|
|
@ -12,10 +12,8 @@ func TestChtimesLinux(t *testing.T) {
|
|||
file, dir := prepareTempFile(t)
|
||||
defer os.RemoveAll(dir)
|
||||
|
||||
beforeUnixEpochTime := time.Unix(0, 0).Add(-100 * time.Second)
|
||||
unixEpochTime := time.Unix(0, 0)
|
||||
afterUnixEpochTime := time.Unix(100, 0)
|
||||
unixMaxTime := maxTime
|
||||
beforeUnixEpochTime := unixEpochTime.Add(-100 * time.Second)
|
||||
afterUnixEpochTime := unixEpochTime.Add(100 * time.Second)
|
||||
|
||||
// Test both aTime and mTime set to Unix Epoch
|
||||
Chtimes(file, unixEpochTime, unixEpochTime)
|
||||
|
|
|
@ -26,10 +26,8 @@ func TestChtimes(t *testing.T) {
|
|||
file, dir := prepareTempFile(t)
|
||||
defer os.RemoveAll(dir)
|
||||
|
||||
beforeUnixEpochTime := time.Unix(0, 0).Add(-100 * time.Second)
|
||||
unixEpochTime := time.Unix(0, 0)
|
||||
afterUnixEpochTime := time.Unix(100, 0)
|
||||
unixMaxTime := maxTime
|
||||
beforeUnixEpochTime := unixEpochTime.Add(-100 * time.Second)
|
||||
afterUnixEpochTime := unixEpochTime.Add(100 * time.Second)
|
||||
|
||||
// Test both aTime and mTime set to Unix Epoch
|
||||
Chtimes(file, unixEpochTime, unixEpochTime)
|
||||
|
|
|
@ -15,10 +15,8 @@ func TestChtimesWindows(t *testing.T) {
|
|||
file, dir := prepareTempFile(t)
|
||||
defer os.RemoveAll(dir)
|
||||
|
||||
beforeUnixEpochTime := time.Unix(0, 0).Add(-100 * time.Second)
|
||||
unixEpochTime := time.Unix(0, 0)
|
||||
afterUnixEpochTime := time.Unix(100, 0)
|
||||
unixMaxTime := maxTime
|
||||
beforeUnixEpochTime := unixEpochTime.Add(-100 * time.Second)
|
||||
afterUnixEpochTime := unixEpochTime.Add(100 * time.Second)
|
||||
|
||||
// Test both aTime and mTime set to Unix Epoch
|
||||
Chtimes(file, unixEpochTime, unixEpochTime)
|
||||
|
|
Loading…
Reference in a new issue