| ... | ... | @@ -296,6 +296,7 @@ pub const ReadError = error{ |
| 296 | 296 | BrokenPipe, |
| 297 | 297 | ConnectionResetByPeer, |
| 298 | 298 | ConnectionTimedOut, |
| 299 | NotOpenForReading, |
| 299 | 300 | |
| 300 | 301 | /// This error occurs when no global event loop is configured, |
| 301 | 302 | /// and reading from the file descriptor would block. |
| ... | ... | @@ -332,7 +333,7 @@ pub fn read(fd: fd_t, buf: []u8) ReadError!usize { |
| 332 | 333 | wasi.EINVAL => unreachable, |
| 333 | 334 | wasi.EFAULT => unreachable, |
| 334 | 335 | wasi.EAGAIN => unreachable, |
| 335 | | wasi.EBADF => unreachable, // Always a race condition. |
| 336 | wasi.EBADF => return error.NotOpenForReading, // Can be a race condition. |
| 336 | 337 | wasi.EIO => return error.InputOutput, |
| 337 | 338 | wasi.EISDIR => return error.IsDir, |
| 338 | 339 | wasi.ENOBUFS => return error.SystemResources, |
| ... | ... | @@ -364,7 +365,7 @@ pub fn read(fd: fd_t, buf: []u8) ReadError!usize { |
| 364 | 365 | } else { |
| 365 | 366 | return error.WouldBlock; |
| 366 | 367 | }, |
| 367 | | EBADF => unreachable, // Always a race condition. |
| 368 | EBADF => return error.NotOpenForReading, // Can be a race condition. |
| 368 | 369 | EIO => return error.InputOutput, |
| 369 | 370 | EISDIR => return error.IsDir, |
| 370 | 371 | ENOBUFS => return error.SystemResources, |
| ... | ... | @@ -402,7 +403,7 @@ pub fn readv(fd: fd_t, iov: []const iovec) ReadError!usize { |
| 402 | 403 | wasi.EINVAL => unreachable, |
| 403 | 404 | wasi.EFAULT => unreachable, |
| 404 | 405 | wasi.EAGAIN => unreachable, // currently not support in WASI |
| 405 | | wasi.EBADF => unreachable, // always a race condition |
| 406 | wasi.EBADF => return error.NotOpenForReading, // can be a race condition |
| 406 | 407 | wasi.EIO => return error.InputOutput, |
| 407 | 408 | wasi.EISDIR => return error.IsDir, |
| 408 | 409 | wasi.ENOBUFS => return error.SystemResources, |
| ... | ... | @@ -426,7 +427,7 @@ pub fn readv(fd: fd_t, iov: []const iovec) ReadError!usize { |
| 426 | 427 | } else { |
| 427 | 428 | return error.WouldBlock; |
| 428 | 429 | }, |
| 429 | | EBADF => unreachable, // always a race condition |
| 430 | EBADF => return error.NotOpenForReading, // can be a race condition |
| 430 | 431 | EIO => return error.InputOutput, |
| 431 | 432 | EISDIR => return error.IsDir, |
| 432 | 433 | ENOBUFS => return error.SystemResources, |
| ... | ... | @@ -463,7 +464,7 @@ pub fn pread(fd: fd_t, buf: []u8, offset: u64) PReadError!usize { |
| 463 | 464 | wasi.EINVAL => unreachable, |
| 464 | 465 | wasi.EFAULT => unreachable, |
| 465 | 466 | wasi.EAGAIN => unreachable, |
| 466 | | wasi.EBADF => unreachable, // Always a race condition. |
| 467 | wasi.EBADF => return error.NotOpenForReading, // Can be a race condition. |
| 467 | 468 | wasi.EIO => return error.InputOutput, |
| 468 | 469 | wasi.EISDIR => return error.IsDir, |
| 469 | 470 | wasi.ENOBUFS => return error.SystemResources, |
| ... | ... | @@ -490,7 +491,7 @@ pub fn pread(fd: fd_t, buf: []u8, offset: u64) PReadError!usize { |
| 490 | 491 | } else { |
| 491 | 492 | return error.WouldBlock; |
| 492 | 493 | }, |
| 493 | | EBADF => unreachable, // Always a race condition. |
| 494 | EBADF => return error.NotOpenForReading, // Can be a race condition. |
| 494 | 495 | EIO => return error.InputOutput, |
| 495 | 496 | EISDIR => return error.IsDir, |
| 496 | 497 | ENOBUFS => return error.SystemResources, |
| ... | ... | @@ -607,7 +608,7 @@ pub fn preadv(fd: fd_t, iov: []const iovec, offset: u64) PReadError!usize { |
| 607 | 608 | wasi.EINVAL => unreachable, |
| 608 | 609 | wasi.EFAULT => unreachable, |
| 609 | 610 | wasi.EAGAIN => unreachable, |
| 610 | | wasi.EBADF => unreachable, // always a race condition |
| 611 | wasi.EBADF => return error.NotOpenForReading, // can be a race condition |
| 611 | 612 | wasi.EIO => return error.InputOutput, |
| 612 | 613 | wasi.EISDIR => return error.IsDir, |
| 613 | 614 | wasi.ENOBUFS => return error.SystemResources, |
| ... | ... | @@ -635,7 +636,7 @@ pub fn preadv(fd: fd_t, iov: []const iovec, offset: u64) PReadError!usize { |
| 635 | 636 | } else { |
| 636 | 637 | return error.WouldBlock; |
| 637 | 638 | }, |
| 638 | | EBADF => unreachable, // always a race condition |
| 639 | EBADF => return error.NotOpenForReading, // can be a race condition |
| 639 | 640 | EIO => return error.InputOutput, |
| 640 | 641 | EISDIR => return error.IsDir, |
| 641 | 642 | ENOBUFS => return error.SystemResources, |
| ... | ... | @@ -660,6 +661,7 @@ pub const WriteError = error{ |
| 660 | 661 | BrokenPipe, |
| 661 | 662 | SystemResources, |
| 662 | 663 | OperationAborted, |
| 664 | NotOpenForWriting, |
| 663 | 665 | |
| 664 | 666 | /// This error occurs when no global event loop is configured, |
| 665 | 667 | /// and reading from the file descriptor would block. |
| ... | ... | @@ -704,7 +706,7 @@ pub fn write(fd: fd_t, bytes: []const u8) WriteError!usize { |
| 704 | 706 | wasi.EINVAL => unreachable, |
| 705 | 707 | wasi.EFAULT => unreachable, |
| 706 | 708 | wasi.EAGAIN => unreachable, |
| 707 | | wasi.EBADF => unreachable, // Always a race condition. |
| 709 | wasi.EBADF => return error.NotOpenForWriting, // can be a race condition. |
| 708 | 710 | wasi.EDESTADDRREQ => unreachable, // `connect` was never called. |
| 709 | 711 | wasi.EDQUOT => return error.DiskQuota, |
| 710 | 712 | wasi.EFBIG => return error.FileTooBig, |
| ... | ... | @@ -736,7 +738,7 @@ pub fn write(fd: fd_t, bytes: []const u8) WriteError!usize { |
| 736 | 738 | } else { |
| 737 | 739 | return error.WouldBlock; |
| 738 | 740 | }, |
| 739 | | EBADF => unreachable, // Always a race condition. |
| 741 | EBADF => return error.NotOpenForWriting, // can be a race condition. |
| 740 | 742 | EDESTADDRREQ => unreachable, // `connect` was never called. |
| 741 | 743 | EDQUOT => return error.DiskQuota, |
| 742 | 744 | EFBIG => return error.FileTooBig, |
| ... | ... | @@ -782,7 +784,7 @@ pub fn writev(fd: fd_t, iov: []const iovec_const) WriteError!usize { |
| 782 | 784 | wasi.EINVAL => unreachable, |
| 783 | 785 | wasi.EFAULT => unreachable, |
| 784 | 786 | wasi.EAGAIN => unreachable, |
| 785 | | wasi.EBADF => unreachable, // Always a race condition. |
| 787 | wasi.EBADF => return error.NotOpenForWriting, // can be a race condition. |
| 786 | 788 | wasi.EDESTADDRREQ => unreachable, // `connect` was never called. |
| 787 | 789 | wasi.EDQUOT => return error.DiskQuota, |
| 788 | 790 | wasi.EFBIG => return error.FileTooBig, |
| ... | ... | @@ -809,7 +811,7 @@ pub fn writev(fd: fd_t, iov: []const iovec_const) WriteError!usize { |
| 809 | 811 | } else { |
| 810 | 812 | return error.WouldBlock; |
| 811 | 813 | }, |
| 812 | | EBADF => unreachable, // Always a race condition. |
| 814 | EBADF => return error.NotOpenForWriting, // Can be a race condition. |
| 813 | 815 | EDESTADDRREQ => unreachable, // `connect` was never called. |
| 814 | 816 | EDQUOT => return error.DiskQuota, |
| 815 | 817 | EFBIG => return error.FileTooBig, |
| ... | ... | @@ -862,7 +864,7 @@ pub fn pwrite(fd: fd_t, bytes: []const u8, offset: u64) PWriteError!usize { |
| 862 | 864 | wasi.EINVAL => unreachable, |
| 863 | 865 | wasi.EFAULT => unreachable, |
| 864 | 866 | wasi.EAGAIN => unreachable, |
| 865 | | wasi.EBADF => unreachable, // Always a race condition. |
| 867 | wasi.EBADF => return error.NotOpenForWriting, // can be a race condition. |
| 866 | 868 | wasi.EDESTADDRREQ => unreachable, // `connect` was never called. |
| 867 | 869 | wasi.EDQUOT => return error.DiskQuota, |
| 868 | 870 | wasi.EFBIG => return error.FileTooBig, |
| ... | ... | @@ -898,7 +900,7 @@ pub fn pwrite(fd: fd_t, bytes: []const u8, offset: u64) PWriteError!usize { |
| 898 | 900 | } else { |
| 899 | 901 | return error.WouldBlock; |
| 900 | 902 | }, |
| 901 | | EBADF => unreachable, // Always a race condition. |
| 903 | EBADF => return error.NotOpenForWriting, // Can be a race condition. |
| 902 | 904 | EDESTADDRREQ => unreachable, // `connect` was never called. |
| 903 | 905 | EDQUOT => return error.DiskQuota, |
| 904 | 906 | EFBIG => return error.FileTooBig, |
| ... | ... | @@ -956,7 +958,7 @@ pub fn pwritev(fd: fd_t, iov: []const iovec_const, offset: u64) PWriteError!usiz |
| 956 | 958 | wasi.EINVAL => unreachable, |
| 957 | 959 | wasi.EFAULT => unreachable, |
| 958 | 960 | wasi.EAGAIN => unreachable, |
| 959 | | wasi.EBADF => unreachable, // Always a race condition. |
| 961 | wasi.EBADF => return error.NotOpenForWriting, // Can be a race condition. |
| 960 | 962 | wasi.EDESTADDRREQ => unreachable, // `connect` was never called. |
| 961 | 963 | wasi.EDQUOT => return error.DiskQuota, |
| 962 | 964 | wasi.EFBIG => return error.FileTooBig, |
| ... | ... | @@ -986,7 +988,7 @@ pub fn pwritev(fd: fd_t, iov: []const iovec_const, offset: u64) PWriteError!usiz |
| 986 | 988 | } else { |
| 987 | 989 | return error.WouldBlock; |
| 988 | 990 | }, |
| 989 | | EBADF => unreachable, // Always a race condition. |
| 991 | EBADF => return error.NotOpenForWriting, // Can be a race condition. |
| 990 | 992 | EDESTADDRREQ => unreachable, // `connect` was never called. |
| 991 | 993 | EDQUOT => return error.DiskQuota, |
| 992 | 994 | EFBIG => return error.FileTooBig, |
| ... | ... | @@ -1251,7 +1253,7 @@ pub fn dup2(old_fd: fd_t, new_fd: fd_t) !void { |
| 1251 | 1253 | EBUSY, EINTR => continue, |
| 1252 | 1254 | EMFILE => return error.ProcessFdQuotaExceeded, |
| 1253 | 1255 | EINVAL => unreachable, // invalid parameters passed to dup2 |
| 1254 | | EBADF => unreachable, // always a race condition |
| 1256 | EBADF => unreachable, // invalid file descriptor |
| 1255 | 1257 | else => |err| return unexpectedErrno(err), |
| 1256 | 1258 | } |
| 1257 | 1259 | } |