| //go:build linux || freebsd | |
| // +build linux freebsd | |
| package system // import "github.com/docker/docker/pkg/system" | |
| import ( | |
| "syscall" | |
| "golang.org/x/sys/unix" | |
| ) | |
| // LUtimesNano is used to change access and modification time of the specified path. | |
| // It's used for symbol link file because unix.UtimesNano doesn't support a NOFOLLOW flag atm. | |
| func LUtimesNano(path string, ts []syscall.Timespec) error { | |
| uts := []unix.Timespec{ | |
| unix.NsecToTimespec(syscall.TimespecToNsec(ts[0])), | |
| unix.NsecToTimespec(syscall.TimespecToNsec(ts[1])), | |
| } | |
| err := unix.UtimesNanoAt(unix.AT_FDCWD, path, uts, unix.AT_SYMLINK_NOFOLLOW) | |
| if err != nil && err != unix.ENOSYS { | |
| return err | |
| } | |
| return nil | |
| } |