stat_linux.go 720 B

1234567891011121314151617181920212223242526272829303132
  1. package archive
  2. import (
  3. "syscall"
  4. "unsafe"
  5. )
  6. func getLastAccess(stat *syscall.Stat_t) syscall.Timespec {
  7. return stat.Atim
  8. }
  9. func getLastModification(stat *syscall.Stat_t) syscall.Timespec {
  10. return stat.Mtim
  11. }
  12. func LUtimesNano(path string, ts []syscall.Timespec) error {
  13. // These are not currently available in syscall
  14. AT_FDCWD := -100
  15. AT_SYMLINK_NOFOLLOW := 0x100
  16. var _path *byte
  17. _path, err := syscall.BytePtrFromString(path)
  18. if err != nil {
  19. return err
  20. }
  21. if _, _, err := syscall.Syscall6(syscall.SYS_UTIMENSAT, uintptr(AT_FDCWD), uintptr(unsafe.Pointer(_path)), uintptr(unsafe.Pointer(&ts[0])), uintptr(AT_SYMLINK_NOFOLLOW), 0, 0); err != 0 && err != syscall.ENOSYS {
  22. return err
  23. }
  24. return nil
  25. }