| // Copyright 2025 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| //go:build wasip1 |
| |
| package unix |
| |
| import ( |
| "syscall" |
| "unsafe" |
| ) |
| |
| //go:wasmimport wasi_snapshot_preview1 path_filestat_set_times |
| //go:noescape |
| func path_filestat_set_times(fd int32, flags uint32, path *byte, pathLen size, atim uint64, mtim uint64, fstflags uint32) syscall.Errno |
| |
| func Utimensat(dirfd int, path string, times *[2]syscall.Timespec, flag int) error { |
| if path == "" { |
| return syscall.EINVAL |
| } |
| atime := syscall.TimespecToNsec(times[0]) |
| mtime := syscall.TimespecToNsec(times[1]) |
| |
| var fflag uint32 |
| if times[0].Nsec != UTIME_OMIT { |
| fflag |= syscall.FILESTAT_SET_ATIM |
| } |
| if times[1].Nsec != UTIME_OMIT { |
| fflag |= syscall.FILESTAT_SET_MTIM |
| } |
| errno := path_filestat_set_times( |
| int32(dirfd), |
| syscall.LOOKUP_SYMLINK_FOLLOW, |
| unsafe.StringData(path), |
| size(len(path)), |
| uint64(atime), |
| uint64(mtime), |
| fflag, |
| ) |
| return errnoErr(errno) |
| } |