32 lines
808 B
Go
32 lines
808 B
Go
//go:build !(freebsd || darwin || dragonfly || js || netbsd || openbsd || windows || (linux && mips64) || (linux && mips) || (linux && mipsle) || (linux && mips64le))
|
|
|
|
package adapters
|
|
|
|
import (
|
|
"archive/tar"
|
|
"syscall"
|
|
"time"
|
|
|
|
"golang.org/x/sys/unix"
|
|
)
|
|
|
|
func EnhanceHeader(path string, hdr *tar.Header) error {
|
|
var unixStat syscall.Stat_t
|
|
if err := syscall.Stat(path, &unixStat); err != nil {
|
|
return err
|
|
}
|
|
|
|
mtimesec, mtimensec := unixStat.Mtim.Unix()
|
|
atimesec, atimensec := unixStat.Atim.Unix()
|
|
ctimesec, ctimensec := unixStat.Ctim.Unix()
|
|
|
|
hdr.ModTime = time.Unix(mtimesec, mtimensec)
|
|
hdr.AccessTime = time.Unix(atimesec, atimensec)
|
|
hdr.ChangeTime = time.Unix(ctimesec, ctimensec)
|
|
|
|
hdr.Devmajor = int64(unix.Major(unixStat.Dev))
|
|
hdr.Devminor = int64(unix.Minor(unixStat.Dev))
|
|
|
|
return nil
|
|
}
|