| ... | @@ -7119,9 +7119,10 @@ fn dirDeleteFileWasi(userdata: ?*anyopaque, dir: Dir, sub_path: []const u8) Dir. | ... | @@ -7119,9 +7119,10 @@ fn dirDeleteFileWasi(userdata: ?*anyopaque, dir: Dir, sub_path: []const u8) Dir. |
| 7119 | if (builtin.link_libc) return dirDeleteFilePosix(userdata, dir, sub_path); | 7119 | if (builtin.link_libc) return dirDeleteFilePosix(userdata, dir, sub_path); |
| 7120 | const t: *Threaded = @ptrCast(@alignCast(userdata)); | 7120 | const t: *Threaded = @ptrCast(@alignCast(userdata)); |
| 7121 | _ = t; | 7121 | _ = t; |
| | 7122 | const wasi = std.os.wasi; |
| 7122 | const syscall: Syscall = try .start(); | 7123 | const syscall: Syscall = try .start(); |
| 7123 | while (true) { | 7124 | while (true) { |
| 7124 | const res = std.os.wasi.path_unlink_file(dir.handle, sub_path.ptr, sub_path.len); | 7125 | const res = wasi.path_unlink_file(dir.handle, sub_path.ptr, sub_path.len); |
| 7125 | switch (res) { | 7126 | switch (res) { |
| 7126 | .SUCCESS => { | 7127 | .SUCCESS => { |
| 7127 | syscall.finish(); | 7128 | syscall.finish(); |
| ... | @@ -7131,11 +7132,35 @@ fn dirDeleteFileWasi(userdata: ?*anyopaque, dir: Dir, sub_path: []const u8) Dir. | ... | @@ -7131,11 +7132,35 @@ fn dirDeleteFileWasi(userdata: ?*anyopaque, dir: Dir, sub_path: []const u8) Dir. |
| 7131 | try syscall.checkCancel(); | 7132 | try syscall.checkCancel(); |
| 7132 | continue; | 7133 | continue; |
| 7133 | }, | 7134 | }, |
| | 7135 | .ACCES, .PERM => |e| { |
| | 7136 | const original_error: Dir.DeleteFileError = switch (e) { |
| | 7137 | .ACCES => error.AccessDenied, |
| | 7138 | .PERM => error.PermissionDenied, |
| | 7139 | else => unreachable, |
| | 7140 | }; |
| | 7141 | var stat: wasi.filestat_t = undefined; |
| | 7142 | while (true) { |
| | 7143 | try syscall.checkCancel(); |
| | 7144 | switch (wasi.path_filestat_get(dir.handle, .{}, sub_path.ptr, sub_path.len, &stat)) { |
| | 7145 | .SUCCESS => { |
| | 7146 | syscall.finish(); |
| | 7147 | break; |
| | 7148 | }, |
| | 7149 | .INTR => continue, |
| | 7150 | else => { |
| | 7151 | syscall.finish(); |
| | 7152 | return original_error; |
| | 7153 | }, |
| | 7154 | } |
| | 7155 | } |
| | 7156 | if (stat.filetype == .DIRECTORY) |
| | 7157 | return error.IsDir |
| | 7158 | else |
| | 7159 | return original_error; |
| | 7160 | }, |
| 7134 | else => |e| { | 7161 | else => |e| { |
| 7135 | syscall.finish(); | 7162 | syscall.finish(); |
| 7136 | switch (e) { | 7163 | switch (e) { |
| 7137 | .ACCES => return error.AccessDenied, | | |
| 7138 | .PERM => return error.PermissionDenied, | | |
| 7139 | .BUSY => return error.FileBusy, | 7164 | .BUSY => return error.FileBusy, |
| 7140 | .FAULT => |err| return errnoBug(err), | 7165 | .FAULT => |err| return errnoBug(err), |
| 7141 | .IO => return error.FileSystem, | 7166 | .IO => return error.FileSystem, |