github.com/kaisenlinux/docker.io@v0.0.0-20230510090727-ea55db55fac7/engine/pkg/system/utimes_unix.go (about)

     1  //go:build linux || freebsd
     2  // +build linux freebsd
     3  
     4  package system // import "github.com/docker/docker/pkg/system"
     5  
     6  import (
     7  	"syscall"
     8  
     9  	"golang.org/x/sys/unix"
    10  )
    11  
    12  // LUtimesNano is used to change access and modification time of the specified path.
    13  // It's used for symbol link file because unix.UtimesNano doesn't support a NOFOLLOW flag atm.
    14  func LUtimesNano(path string, ts []syscall.Timespec) error {
    15  	uts := []unix.Timespec{
    16  		unix.NsecToTimespec(syscall.TimespecToNsec(ts[0])),
    17  		unix.NsecToTimespec(syscall.TimespecToNsec(ts[1])),
    18  	}
    19  	err := unix.UtimesNanoAt(unix.AT_FDCWD, path, uts, unix.AT_SYMLINK_NOFOLLOW)
    20  	if err != nil && err != unix.ENOSYS {
    21  		return err
    22  	}
    23  
    24  	return nil
    25  }