| ... | ... | @@ -882,6 +882,8 @@ fn dirMakePosix(userdata: ?*anyopaque, dir: Io.Dir, sub_path: []const u8, mode: |
| 882 | 882 | switch (posix.errno(posix.system.mkdirat(dir.handle, sub_path_posix, mode))) { |
| 883 | 883 | .SUCCESS => return, |
| 884 | 884 | .INTR => continue, |
| 885 | .CANCELED => return error.Canceled, |
| 886 | |
| 885 | 887 | .ACCES => return error.AccessDenied, |
| 886 | 888 | .BADF => |err| return errnoBug(err), |
| 887 | 889 | .PERM => return error.PermissionDenied, |
| ... | ... | @@ -940,6 +942,8 @@ fn dirStatPathLinux( |
| 940 | 942 | switch (linux.E.init(rc)) { |
| 941 | 943 | .SUCCESS => return statFromLinux(&statx), |
| 942 | 944 | .INTR => continue, |
| 945 | .CANCELED => return error.Canceled, |
| 946 | |
| 943 | 947 | .ACCES => return error.AccessDenied, |
| 944 | 948 | .BADF => |err| return errnoBug(err), |
| 945 | 949 | .FAULT => |err| return errnoBug(err), |
| ... | ... | @@ -973,6 +977,8 @@ fn dirStatPathPosix( |
| 973 | 977 | switch (posix.errno(fstatat_sym(dir.handle, sub_path_posix, &stat, flags))) { |
| 974 | 978 | .SUCCESS => return statFromPosix(&stat), |
| 975 | 979 | .INTR => continue, |
| 980 | .CANCELED => return error.Canceled, |
| 981 | |
| 976 | 982 | .INVAL => |err| return errnoBug(err), |
| 977 | 983 | .BADF => |err| return errnoBug(err), // Always a race condition. |
| 978 | 984 | .NOMEM => return error.SystemResources, |
| ... | ... | @@ -1035,6 +1041,8 @@ fn fileStatPosix(userdata: ?*anyopaque, file: Io.File) Io.File.StatError!Io.File |
| 1035 | 1041 | switch (posix.errno(fstat_sym(file.handle, &stat))) { |
| 1036 | 1042 | .SUCCESS => return statFromPosix(&stat), |
| 1037 | 1043 | .INTR => continue, |
| 1044 | .CANCELED => return error.Canceled, |
| 1045 | |
| 1038 | 1046 | .INVAL => |err| return errnoBug(err), |
| 1039 | 1047 | .BADF => |err| return errnoBug(err), |
| 1040 | 1048 | .NOMEM => return error.SystemResources, |
| ... | ... | @@ -1060,6 +1068,8 @@ fn fileStatLinux(userdata: ?*anyopaque, file: Io.File) Io.File.StatError!Io.File |
| 1060 | 1068 | switch (linux.E.init(rc)) { |
| 1061 | 1069 | .SUCCESS => return statFromLinux(&statx), |
| 1062 | 1070 | .INTR => continue, |
| 1071 | .CANCELED => return error.Canceled, |
| 1072 | |
| 1063 | 1073 | .ACCES => |err| return errnoBug(err), |
| 1064 | 1074 | .BADF => |err| return errnoBug(err), |
| 1065 | 1075 | .FAULT => |err| return errnoBug(err), |
| ... | ... | @@ -1090,6 +1100,8 @@ fn fileStatWasi(userdata: ?*anyopaque, file: Io.File) Io.File.StatError!Io.File. |
| 1090 | 1100 | switch (std.os.wasi.fd_filestat_get(file.handle, &stat)) { |
| 1091 | 1101 | .SUCCESS => return statFromWasi(&stat), |
| 1092 | 1102 | .INTR => continue, |
| 1103 | .CANCELED => return error.Canceled, |
| 1104 | |
| 1093 | 1105 | .INVAL => |err| return errnoBug(err), |
| 1094 | 1106 | .BADF => |err| return errnoBug(err), |
| 1095 | 1107 | .NOMEM => return error.SystemResources, |
| ... | ... | @@ -1253,6 +1265,7 @@ fn dirCreateFilePosix( |
| 1253 | 1265 | switch (posix.errno(rc)) { |
| 1254 | 1266 | .SUCCESS => break @intCast(rc), |
| 1255 | 1267 | .INTR => continue, |
| 1268 | .CANCELED => return error.Canceled, |
| 1256 | 1269 | |
| 1257 | 1270 | .FAULT => |err| return errnoBug(err), |
| 1258 | 1271 | .INVAL => return error.BadPathName, |
| ... | ... | @@ -1296,6 +1309,7 @@ fn dirCreateFilePosix( |
| 1296 | 1309 | switch (posix.errno(posix.system.flock(fd, lock_flags))) { |
| 1297 | 1310 | .SUCCESS => break, |
| 1298 | 1311 | .INTR => continue, |
| 1312 | .CANCELED => return error.Canceled, |
| 1299 | 1313 | |
| 1300 | 1314 | .BADF => |err| return errnoBug(err), |
| 1301 | 1315 | .INVAL => |err| return errnoBug(err), // invalid parameters |
| ... | ... | @@ -1314,6 +1328,7 @@ fn dirCreateFilePosix( |
| 1314 | 1328 | switch (posix.errno(rc)) { |
| 1315 | 1329 | .SUCCESS => break @intCast(rc), |
| 1316 | 1330 | .INTR => continue, |
| 1331 | .CANCELED => return error.Canceled, |
| 1317 | 1332 | else => |err| return posix.unexpectedErrno(err), |
| 1318 | 1333 | } |
| 1319 | 1334 | }; |
| ... | ... | @@ -1323,6 +1338,7 @@ fn dirCreateFilePosix( |
| 1323 | 1338 | switch (posix.errno(posix.system.fcntl(fd, posix.F.SETFL, fl_flags))) { |
| 1324 | 1339 | .SUCCESS => break, |
| 1325 | 1340 | .INTR => continue, |
| 1341 | .CANCELED => return error.Canceled, |
| 1326 | 1342 | else => |err| return posix.unexpectedErrno(err), |
| 1327 | 1343 | } |
| 1328 | 1344 | } |
| ... | ... | @@ -1383,6 +1399,7 @@ fn dirOpenFile( |
| 1383 | 1399 | switch (posix.errno(rc)) { |
| 1384 | 1400 | .SUCCESS => break @intCast(rc), |
| 1385 | 1401 | .INTR => continue, |
| 1402 | .CANCELED => return error.Canceled, |
| 1386 | 1403 | |
| 1387 | 1404 | .FAULT => |err| return errnoBug(err), |
| 1388 | 1405 | .INVAL => return error.BadPathName, |
| ... | ... | @@ -1426,6 +1443,7 @@ fn dirOpenFile( |
| 1426 | 1443 | switch (posix.errno(posix.system.flock(fd, lock_flags))) { |
| 1427 | 1444 | .SUCCESS => break, |
| 1428 | 1445 | .INTR => continue, |
| 1446 | .CANCELED => return error.Canceled, |
| 1429 | 1447 | |
| 1430 | 1448 | .BADF => |err| return errnoBug(err), |
| 1431 | 1449 | .INVAL => |err| return errnoBug(err), // invalid parameters |
| ... | ... | @@ -1444,6 +1462,7 @@ fn dirOpenFile( |
| 1444 | 1462 | switch (posix.errno(rc)) { |
| 1445 | 1463 | .SUCCESS => break @intCast(rc), |
| 1446 | 1464 | .INTR => continue, |
| 1465 | .CANCELED => return error.Canceled, |
| 1447 | 1466 | else => |err| return posix.unexpectedErrno(err), |
| 1448 | 1467 | } |
| 1449 | 1468 | }; |
| ... | ... | @@ -1453,6 +1472,7 @@ fn dirOpenFile( |
| 1453 | 1472 | switch (posix.errno(posix.system.fcntl(fd, posix.F.SETFL, fl_flags))) { |
| 1454 | 1473 | .SUCCESS => break, |
| 1455 | 1474 | .INTR => continue, |
| 1475 | .CANCELED => return error.Canceled, |
| 1456 | 1476 | else => |err| return posix.unexpectedErrno(err), |
| 1457 | 1477 | } |
| 1458 | 1478 | } |
| ... | ... | @@ -1526,6 +1546,8 @@ fn fileReadStreaming(userdata: ?*anyopaque, file: Io.File, data: [][]u8) Io.File |
| 1526 | 1546 | switch (std.os.wasi.fd_read(file.handle, dest.ptr, dest.len, &nread)) { |
| 1527 | 1547 | .SUCCESS => return nread, |
| 1528 | 1548 | .INTR => continue, |
| 1549 | .CANCELED => return error.Canceled, |
| 1550 | |
| 1529 | 1551 | .INVAL => |err| return errnoBug(err), |
| 1530 | 1552 | .FAULT => |err| return errnoBug(err), |
| 1531 | 1553 | .BADF => |err| return errnoBug(err), |
| ... | ... | @@ -1547,6 +1569,8 @@ fn fileReadStreaming(userdata: ?*anyopaque, file: Io.File, data: [][]u8) Io.File |
| 1547 | 1569 | switch (posix.errno(rc)) { |
| 1548 | 1570 | .SUCCESS => return @intCast(rc), |
| 1549 | 1571 | .INTR => continue, |
| 1572 | .CANCELED => return error.Canceled, |
| 1573 | |
| 1550 | 1574 | .INVAL => |err| return errnoBug(err), |
| 1551 | 1575 | .FAULT => |err| return errnoBug(err), |
| 1552 | 1576 | .SRCH => return error.ProcessNotFound, |
| ... | ... | @@ -1647,6 +1671,8 @@ fn fileReadPositional(userdata: ?*anyopaque, file: Io.File, data: [][]u8, offset |
| 1647 | 1671 | switch (std.os.wasi.fd_pread(file.handle, dest.ptr, dest.len, offset, &nread)) { |
| 1648 | 1672 | .SUCCESS => return nread, |
| 1649 | 1673 | .INTR => continue, |
| 1674 | .CANCELED => return error.Canceled, |
| 1675 | |
| 1650 | 1676 | .INVAL => |err| return errnoBug(err), |
| 1651 | 1677 | .FAULT => |err| return errnoBug(err), |
| 1652 | 1678 | .AGAIN => |err| return errnoBug(err), |
| ... | ... | @@ -1672,6 +1698,8 @@ fn fileReadPositional(userdata: ?*anyopaque, file: Io.File, data: [][]u8, offset |
| 1672 | 1698 | switch (posix.errno(rc)) { |
| 1673 | 1699 | .SUCCESS => return @bitCast(rc), |
| 1674 | 1700 | .INTR => continue, |
| 1701 | .CANCELED => return error.Canceled, |
| 1702 | |
| 1675 | 1703 | .INVAL => |err| return errnoBug(err), |
| 1676 | 1704 | .FAULT => |err| return errnoBug(err), |
| 1677 | 1705 | .SRCH => return error.ProcessNotFound, |
| ... | ... | @@ -1711,6 +1739,8 @@ fn fileSeekTo(userdata: ?*anyopaque, file: Io.File, offset: u64) Io.File.SeekErr |
| 1711 | 1739 | switch (posix.errno(posix.system.llseek(fd, offset, &result, posix.SEEK.SET))) { |
| 1712 | 1740 | .SUCCESS => return, |
| 1713 | 1741 | .INTR => continue, |
| 1742 | .CANCELED => return error.Canceled, |
| 1743 | |
| 1714 | 1744 | .BADF => |err| return errnoBug(err), // Always a race condition. |
| 1715 | 1745 | .INVAL => return error.Unseekable, |
| 1716 | 1746 | .OVERFLOW => return error.Unseekable, |
| ... | ... | @@ -1731,6 +1761,8 @@ fn fileSeekTo(userdata: ?*anyopaque, file: Io.File, offset: u64) Io.File.SeekErr |
| 1731 | 1761 | switch (std.os.wasi.fd_seek(fd, @bitCast(offset), .SET, &new_offset)) { |
| 1732 | 1762 | .SUCCESS => return, |
| 1733 | 1763 | .INTR => continue, |
| 1764 | .CANCELED => return error.Canceled, |
| 1765 | |
| 1734 | 1766 | .BADF => |err| return errnoBug(err), // Always a race condition. |
| 1735 | 1767 | .INVAL => return error.Unseekable, |
| 1736 | 1768 | .OVERFLOW => return error.Unseekable, |
| ... | ... | @@ -1748,6 +1780,8 @@ fn fileSeekTo(userdata: ?*anyopaque, file: Io.File, offset: u64) Io.File.SeekErr |
| 1748 | 1780 | switch (posix.errno(lseek_sym(fd, @bitCast(offset), posix.SEEK.SET))) { |
| 1749 | 1781 | .SUCCESS => return, |
| 1750 | 1782 | .INTR => continue, |
| 1783 | .CANCELED => return error.Canceled, |
| 1784 | |
| 1751 | 1785 | .BADF => |err| return errnoBug(err), // Always a race condition. |
| 1752 | 1786 | .INVAL => return error.Unseekable, |
| 1753 | 1787 | .OVERFLOW => return error.Unseekable, |
| ... | ... | @@ -1845,6 +1879,7 @@ fn sleepLinux(userdata: ?*anyopaque, timeout: Io.Timeout) Io.SleepError!void { |
| 1845 | 1879 | } }, &timespec, &timespec))) { |
| 1846 | 1880 | .SUCCESS => return, |
| 1847 | 1881 | .INTR => continue, |
| 1882 | .CANCELED => return error.Canceled, |
| 1848 | 1883 | .INVAL => return error.UnsupportedClock, |
| 1849 | 1884 | else => |err| return posix.unexpectedErrno(err), |
| 1850 | 1885 | } |
| ... | ... | @@ -1907,6 +1942,7 @@ fn sleepPosix(userdata: ?*anyopaque, timeout: Io.Timeout) Io.SleepError!void { |
| 1907 | 1942 | try t.checkCancel(); |
| 1908 | 1943 | switch (posix.errno(posix.system.nanosleep(&timespec, &timespec))) { |
| 1909 | 1944 | .INTR => continue, |
| 1945 | .CANCELED => return error.Canceled, |
| 1910 | 1946 | else => return, // This prong handles success as well as unexpected errors. |
| 1911 | 1947 | } |
| 1912 | 1948 | } |
| ... | ... | @@ -2024,6 +2060,8 @@ fn posixBindUnix(t: *Threaded, fd: posix.socket_t, addr: *const posix.sockaddr, |
| 2024 | 2060 | switch (posix.errno(posix.system.bind(fd, addr, addr_len))) { |
| 2025 | 2061 | .SUCCESS => break, |
| 2026 | 2062 | .INTR => continue, |
| 2063 | .CANCELED => return error.Canceled, |
| 2064 | |
| 2027 | 2065 | .ACCES => return error.AccessDenied, |
| 2028 | 2066 | .ADDRINUSE => return error.AddressInUse, |
| 2029 | 2067 | .AFNOSUPPORT => return error.AddressFamilyUnsupported, |
| ... | ... | @@ -2052,6 +2090,8 @@ fn posixBind(t: *Threaded, socket_fd: posix.socket_t, addr: *const posix.sockadd |
| 2052 | 2090 | switch (posix.errno(posix.system.bind(socket_fd, addr, addr_len))) { |
| 2053 | 2091 | .SUCCESS => break, |
| 2054 | 2092 | .INTR => continue, |
| 2093 | .CANCELED => return error.Canceled, |
| 2094 | |
| 2055 | 2095 | .ADDRINUSE => return error.AddressInUse, |
| 2056 | 2096 | .BADF => |err| return errnoBug(err), // always a race condition if this error is returned |
| 2057 | 2097 | .INVAL => |err| return errnoBug(err), // invalid parameters |
| ... | ... | @@ -2071,6 +2111,8 @@ fn posixConnect(t: *Threaded, socket_fd: posix.socket_t, addr: *const posix.sock |
| 2071 | 2111 | switch (posix.errno(posix.system.connect(socket_fd, addr, addr_len))) { |
| 2072 | 2112 | .SUCCESS => return, |
| 2073 | 2113 | .INTR => continue, |
| 2114 | .CANCELED => return error.Canceled, |
| 2115 | |
| 2074 | 2116 | .ADDRNOTAVAIL => return error.AddressUnavailable, |
| 2075 | 2117 | .AFNOSUPPORT => return error.AddressFamilyUnsupported, |
| 2076 | 2118 | .AGAIN, .INPROGRESS => return error.WouldBlock, |
| ... | ... | @@ -2100,6 +2142,7 @@ fn posixConnectUnix(t: *Threaded, fd: posix.socket_t, addr: *const posix.sockadd |
| 2100 | 2142 | switch (posix.errno(posix.system.connect(fd, addr, addr_len))) { |
| 2101 | 2143 | .SUCCESS => return, |
| 2102 | 2144 | .INTR => continue, |
| 2145 | .CANCELED => return error.Canceled, |
| 2103 | 2146 | |
| 2104 | 2147 | .AFNOSUPPORT => return error.AddressFamilyUnsupported, |
| 2105 | 2148 | .AGAIN => return error.WouldBlock, |
| ... | ... | @@ -2129,6 +2172,8 @@ fn posixGetSockName(t: *Threaded, socket_fd: posix.fd_t, addr: *posix.sockaddr, |
| 2129 | 2172 | switch (posix.errno(posix.system.getsockname(socket_fd, addr, addr_len))) { |
| 2130 | 2173 | .SUCCESS => break, |
| 2131 | 2174 | .INTR => continue, |
| 2175 | .CANCELED => return error.Canceled, |
| 2176 | |
| 2132 | 2177 | .BADF => |err| return errnoBug(err), // always a race condition |
| 2133 | 2178 | .FAULT => |err| return errnoBug(err), |
| 2134 | 2179 | .INVAL => |err| return errnoBug(err), // invalid parameters |
| ... | ... | @@ -2146,6 +2191,8 @@ fn setSocketOption(t: *Threaded, fd: posix.fd_t, level: i32, opt_name: u32, opti |
| 2146 | 2191 | switch (posix.errno(posix.system.setsockopt(fd, level, opt_name, o.ptr, @intCast(o.len)))) { |
| 2147 | 2192 | .SUCCESS => return, |
| 2148 | 2193 | .INTR => continue, |
| 2194 | .CANCELED => return error.Canceled, |
| 2195 | |
| 2149 | 2196 | .BADF => |err| return errnoBug(err), // always a race condition |
| 2150 | 2197 | .NOTSOCK => |err| return errnoBug(err), // always a race condition |
| 2151 | 2198 | .INVAL => |err| return errnoBug(err), |
| ... | ... | @@ -2245,12 +2292,15 @@ fn openSocketPosix( |
| 2245 | 2292 | switch (posix.errno(posix.system.fcntl(fd, posix.F.SETFD, @as(usize, posix.FD_CLOEXEC)))) { |
| 2246 | 2293 | .SUCCESS => break, |
| 2247 | 2294 | .INTR => continue, |
| 2295 | .CANCELED => return error.Canceled, |
| 2248 | 2296 | else => |err| return posix.unexpectedErrno(err), |
| 2249 | 2297 | } |
| 2250 | 2298 | }; |
| 2251 | 2299 | break fd; |
| 2252 | 2300 | }, |
| 2253 | 2301 | .INTR => continue, |
| 2302 | .CANCELED => return error.Canceled, |
| 2303 | |
| 2254 | 2304 | .AFNOSUPPORT => return error.AddressFamilyUnsupported, |
| 2255 | 2305 | .INVAL => return error.ProtocolUnsupportedBySystem, |
| 2256 | 2306 | .MFILE => return error.ProcessFdQuotaExceeded, |
| ... | ... | @@ -2294,12 +2344,14 @@ fn netAcceptPosix(userdata: ?*anyopaque, listen_fd: net.Socket.Handle) net.Serve |
| 2294 | 2344 | switch (posix.errno(posix.system.fcntl(fd, posix.F.SETFD, @as(usize, posix.FD_CLOEXEC)))) { |
| 2295 | 2345 | .SUCCESS => break, |
| 2296 | 2346 | .INTR => continue, |
| 2347 | .CANCELED => return error.Canceled, |
| 2297 | 2348 | else => |err| return posix.unexpectedErrno(err), |
| 2298 | 2349 | } |
| 2299 | 2350 | }; |
| 2300 | 2351 | break fd; |
| 2301 | 2352 | }, |
| 2302 | 2353 | .INTR => continue, |
| 2354 | .CANCELED => return error.Canceled, |
| 2303 | 2355 | .AGAIN => |err| return errnoBug(err), |
| 2304 | 2356 | .BADF => |err| return errnoBug(err), // always a race condition |
| 2305 | 2357 | .CONNABORTED => return error.ConnectionAborted, |
| ... | ... | @@ -2343,6 +2395,7 @@ fn netReadPosix(userdata: ?*anyopaque, fd: net.Socket.Handle, data: [][]u8) net. |
| 2343 | 2395 | switch (std.os.wasi.fd_read(fd, dest.ptr, dest.len, &n)) { |
| 2344 | 2396 | .SUCCESS => return n, |
| 2345 | 2397 | .INTR => continue, |
| 2398 | .CANCELED => return error.Canceled, |
| 2346 | 2399 | |
| 2347 | 2400 | .INVAL => |err| return errnoBug(err), |
| 2348 | 2401 | .FAULT => |err| return errnoBug(err), |
| ... | ... | @@ -2364,6 +2417,7 @@ fn netReadPosix(userdata: ?*anyopaque, fd: net.Socket.Handle, data: [][]u8) net. |
| 2364 | 2417 | switch (posix.errno(rc)) { |
| 2365 | 2418 | .SUCCESS => return @intCast(rc), |
| 2366 | 2419 | .INTR => continue, |
| 2420 | .CANCELED => return error.Canceled, |
| 2367 | 2421 | |
| 2368 | 2422 | .INVAL => |err| return errnoBug(err), |
| 2369 | 2423 | .FAULT => |err| return errnoBug(err), |
| ... | ... | @@ -2464,6 +2518,7 @@ fn netSendOne( |
| 2464 | 2518 | return; |
| 2465 | 2519 | }, |
| 2466 | 2520 | .INTR => continue, |
| 2521 | .CANCELED => return error.Canceled, |
| 2467 | 2522 | |
| 2468 | 2523 | .ACCES => return error.AccessDenied, |
| 2469 | 2524 | .ALREADY => return error.FastOpenAlreadyInProgress, |
| ... | ... | @@ -2531,13 +2586,15 @@ fn netSendMany( |
| 2531 | 2586 | } |
| 2532 | 2587 | return n; |
| 2533 | 2588 | }, |
| 2589 | .INTR => continue, |
| 2590 | .CANCELED => return error.Canceled, |
| 2591 | |
| 2534 | 2592 | .AGAIN => |err| return errnoBug(err), |
| 2535 | 2593 | .ALREADY => return error.FastOpenAlreadyInProgress, |
| 2536 | 2594 | .BADF => |err| return errnoBug(err), // Always a race condition. |
| 2537 | 2595 | .CONNRESET => return error.ConnectionResetByPeer, |
| 2538 | 2596 | .DESTADDRREQ => |err| return errnoBug(err), // The socket is not connection-mode, and no peer address is set. |
| 2539 | 2597 | .FAULT => |err| return errnoBug(err), // An invalid user space address was specified for an argument. |
| 2540 | | .INTR => continue, |
| 2541 | 2598 | .INVAL => |err| return errnoBug(err), // Invalid argument passed. |
| 2542 | 2599 | .ISCONN => |err| return errnoBug(err), // connection-mode socket was connected already but a recipient was specified |
| 2543 | 2600 | .MSGSIZE => return error.MessageOversize, |
| ... | ... | @@ -2654,6 +2711,7 @@ fn netReceive( |
| 2654 | 2711 | continue :recv; |
| 2655 | 2712 | }, |
| 2656 | 2713 | .INTR => continue, |
| 2714 | .CANCELED => return .{ error.Canceled, message_i }, |
| 2657 | 2715 | |
| 2658 | 2716 | .FAULT => |err| return .{ errnoBug(err), message_i }, |
| 2659 | 2717 | .INVAL => |err| return .{ errnoBug(err), message_i }, |
| ... | ... | @@ -2662,6 +2720,7 @@ fn netReceive( |
| 2662 | 2720 | } |
| 2663 | 2721 | }, |
| 2664 | 2722 | .INTR => continue, |
| 2723 | .CANCELED => return .{ error.Canceled, message_i }, |
| 2665 | 2724 | |
| 2666 | 2725 | .BADF => |err| return .{ errnoBug(err), message_i }, |
| 2667 | 2726 | .NFILE => return .{ error.SystemFdQuotaExceeded, message_i }, |
| ... | ... | @@ -2780,6 +2839,8 @@ fn netInterfaceNameResolve( |
| 2780 | 2839 | switch (posix.errno(posix.system.ioctl(sock_fd, posix.SIOCGIFINDEX, @intFromPtr(&ifr)))) { |
| 2781 | 2840 | .SUCCESS => return .{ .index = @bitCast(ifr.ifru.ivalue) }, |
| 2782 | 2841 | .INTR => continue, |
| 2842 | .CANCELED => return error.Canceled, |
| 2843 | |
| 2783 | 2844 | .INVAL => |err| return errnoBug(err), // Bad parameters. |
| 2784 | 2845 | .NOTTY => |err| return errnoBug(err), |
| 2785 | 2846 | .NXIO => |err| return errnoBug(err), |
| ... | ... | @@ -2968,6 +3029,7 @@ fn netLookupFallible( |
| 2968 | 3029 | .NONAME => return error.UnknownHostName, |
| 2969 | 3030 | .SYSTEM => switch (posix.errno(-1)) { |
| 2970 | 3031 | .INTR => continue, |
| 3032 | .CANCELED => return error.Canceled, |
| 2971 | 3033 | else => |e| return posix.unexpectedErrno(e), |
| 2972 | 3034 | }, |
| 2973 | 3035 | else => return error.Unexpected, |
| ... | ... | @@ -3754,7 +3816,7 @@ pub fn futexWake(ptr: *const std.atomic.Value(u32), max_waiters: u32) void { |
| 3754 | 3816 | const status = c.__ulock_wake(flags, ptr, 0); |
| 3755 | 3817 | if (status >= 0) return; |
| 3756 | 3818 | switch (@as(c.E, @enumFromInt(-status))) { |
| 3757 | | .INTR => continue, // spurious wake() |
| 3819 | .INTR, .CANCELED => continue, // spurious wake() |
| 3758 | 3820 | .FAULT => assert(!is_debug), // __ulock_wake doesn't generate EFAULT according to darwin pthread_cond_t |
| 3759 | 3821 | .NOENT => return, // nothing was woken up |
| 3760 | 3822 | .ALREADY => assert(!is_debug), // only for UL.Op.WAKE_THREAD |