| ... | ... | @@ -6083,13 +6083,30 @@ fn fileSetTimestamps( |
| 6083 | 6083 | } |
| 6084 | 6084 | |
| 6085 | 6085 | if (native_os == .wasi and !builtin.link_libc) { |
| 6086 | | const atim = timestampToPosix(options.access_timestamp.nanoseconds).toTimestamp(); |
| 6087 | | const mtim = timestampToPosix(options.modify_timestamp.nanoseconds).toTimestamp(); |
| 6086 | var atime: std.os.wasi.timestamp_t = 0; |
| 6087 | var mtime: std.os.wasi.timestamp_t = 0; |
| 6088 | var flags: std.os.wasi.fstflags_t = .{}; |
| 6089 | |
| 6090 | switch (options.access_timestamp) { |
| 6091 | .unchanged => {}, |
| 6092 | .now => flags.ATIM_NOW = true, |
| 6093 | .new => |ts| { |
| 6094 | atime = timestampToPosix(ts.nanoseconds).toTimestamp(); |
| 6095 | flags.ATIM = true; |
| 6096 | }, |
| 6097 | } |
| 6098 | |
| 6099 | switch (options.modify_timestamp) { |
| 6100 | .unchanged => {}, |
| 6101 | .now => flags.MTIM_NOW = true, |
| 6102 | .new => |ts| { |
| 6103 | mtime = timestampToPosix(ts.nanoseconds).toTimestamp(); |
| 6104 | flags.MTIM = true; |
| 6105 | }, |
| 6106 | } |
| 6107 | |
| 6088 | 6108 | try current_thread.beginSyscall(); |
| 6089 | | while (true) switch (std.os.wasi.fd_filestat_set_times(file.handle, atim, mtim, .{ |
| 6090 | | .ATIM = true, |
| 6091 | | .MTIM = true, |
| 6092 | | })) { |
| 6109 | while (true) switch (std.os.wasi.fd_filestat_set_times(file.handle, atime, mtime, flags)) { |
| 6093 | 6110 | .SUCCESS => return current_thread.endSyscall(), |
| 6094 | 6111 | .INTR => { |
| 6095 | 6112 | try current_thread.checkCancel(); |
| ... | ... | @@ -6098,9 +6115,9 @@ fn fileSetTimestamps( |
| 6098 | 6115 | .BADF => |err| return current_thread.endSyscallErrnoBug(err), // File descriptor use-after-free. |
| 6099 | 6116 | .FAULT => |err| return current_thread.endSyscallErrnoBug(err), |
| 6100 | 6117 | .INVAL => |err| return current_thread.endSyscallErrnoBug(err), |
| 6101 | | .ACCES => return current_thread.endSyscallErrnoBug(error.AccessDenied), |
| 6102 | | .PERM => return current_thread.endSyscallErrnoBug(error.PermissionDenied), |
| 6103 | | .ROFS => return current_thread.endSyscallErrnoBug(error.ReadOnlyFileSystem), |
| 6118 | .ACCES => return current_thread.endSyscallError(error.AccessDenied), |
| 6119 | .PERM => return current_thread.endSyscallError(error.PermissionDenied), |
| 6120 | .ROFS => return current_thread.endSyscallError(error.ReadOnlyFileSystem), |
| 6104 | 6121 | else => |err| return current_thread.endSyscallUnexpectedErrno(err), |
| 6105 | 6122 | }; |
| 6106 | 6123 | } |