github.com/cdoern/storage@v1.12.13/pkg/system/utimes_linux.go (about)

     1  package system
     2  
     3  import (
     4  	"syscall"
     5  	"unsafe"
     6  
     7  	"golang.org/x/sys/unix"
     8  )
     9  
    10  // LUtimesNano is used to change access and modification time of the specified path.
    11  // It's used for symbol link file because unix.UtimesNano doesn't support a NOFOLLOW flag atm.
    12  func LUtimesNano(path string, ts []syscall.Timespec) error {
    13  	atFdCwd := unix.AT_FDCWD
    14  
    15  	var _path *byte
    16  	_path, err := unix.BytePtrFromString(path)
    17  	if err != nil {
    18  		return err
    19  	}
    20  	if _, _, err := unix.Syscall6(unix.SYS_UTIMENSAT, uintptr(atFdCwd), uintptr(unsafe.Pointer(_path)), uintptr(unsafe.Pointer(&ts[0])), unix.AT_SYMLINK_NOFOLLOW, 0, 0); err != 0 && err != unix.ENOSYS {
    21  		return err
    22  	}
    23  
    24  	return nil
    25  }