| ... | ... | @@ -203,7 +203,9 @@ struct DirEntry { |
| 203 | 203 | static uint32_t fd_len; |
| 204 | 204 | static struct FileDescriptor { |
| 205 | 205 | uint32_t de; |
| 206 | enum wasi_fdflags fdflags; |
| 206 | 207 | FILE *stream; |
| 208 | uint64_t fs_rights_inheriting; |
| 207 | 209 | } *fds; |
| 208 | 210 | |
| 209 | 211 | static void *dupe(const void *data, size_t len) { |
| ... | ... | @@ -707,13 +709,17 @@ uint32_t wasi_snapshot_preview1_path_filestat_get(uint32_t fd, uint32_t flags, u |
| 707 | 709 | } |
| 708 | 710 | |
| 709 | 711 | uint32_t wasi_snapshot_preview1_fd_fdstat_get(uint32_t fd, uint32_t res_fdstat) { |
| 710 | | (void)fd; |
| 711 | | (void)res_fdstat; |
| 712 | uint8_t *const m = *wasm_memory; |
| 713 | struct wasi_fdstat *res_fdstat_ptr = (struct wasi_fdstat *)&m[res_fdstat]; |
| 712 | 714 | #if LOG_TRACE |
| 713 | 715 | fprintf(stderr, "wasi_snapshot_preview1_fd_fdstat_get(%u)\n", fd); |
| 714 | 716 | #endif |
| 715 | 717 | |
| 716 | | panic("unimplemented"); |
| 718 | if (fd >= fd_len || fds[fd].de >= de_len) return wasi_errno_badf; |
| 719 | res_fdstat_ptr->fs_filetype = des[fds[fd].de].filetype; |
| 720 | res_fdstat_ptr->fs_flags = fds[fd].fdflags; |
| 721 | res_fdstat_ptr->padding = 0; |
| 722 | res_fdstat_ptr->fs_rights_inheriting = fds[fd].fs_rights_inheriting; |
| 717 | 723 | return wasi_errno_success; |
| 718 | 724 | } |
| 719 | 725 | |
| ... | ... | @@ -770,7 +776,6 @@ uint32_t wasi_snapshot_preview1_fd_write(uint32_t fd, uint32_t iovs, uint32_t io |
| 770 | 776 | uint32_t wasi_snapshot_preview1_path_open(uint32_t fd, uint32_t dirflags, uint32_t path, uint32_t path_len, uint32_t oflags, uint64_t fs_rights_base, uint64_t fs_rights_inheriting, uint32_t fdflags, uint32_t res_fd) { |
| 771 | 777 | uint8_t *const m = *wasm_memory; |
| 772 | 778 | const char *path_ptr = (const char *)&m[path]; |
| 773 | | (void)fs_rights_inheriting; |
| 774 | 779 | uint32_t *res_fd_ptr = (uint32_t *)&m[res_fd]; |
| 775 | 780 | #if LOG_TRACE |
| 776 | 781 | fprintf(stderr, "wasi_snapshot_preview1_path_open(%u, 0x%X, \"%.*s\", 0x%X, 0x%llX, 0x%llX, 0x%X)\n", fd, dirflags, (int)path_len, path_ptr, oflags, (unsigned long long)fs_rights_base, (unsigned long long)fs_rights_inheriting, fdflags); |
| ... | ... | @@ -792,10 +797,12 @@ uint32_t wasi_snapshot_preview1_path_open(uint32_t fd, uint32_t dirflags, uint32 |
| 792 | 797 | fds = new_fds; |
| 793 | 798 | |
| 794 | 799 | fds[fd_len].de = de; |
| 800 | fds[fd_len].fdflags = fdflags; |
| 795 | 801 | switch (des[de].filetype) { |
| 796 | 802 | case wasi_filetype_directory: fds[fd_len].stream = NULL; break; |
| 797 | 803 | default: panic("unimplemented"); |
| 798 | 804 | } |
| 805 | fds[fd_len].fs_rights_inheriting = fs_rights_inheriting; |
| 799 | 806 | |
| 800 | 807 | #if LOG_TRACE |
| 801 | 808 | fprintf(stderr, "fd = %u\n", fd_len); |
| ... | ... | @@ -855,7 +862,9 @@ uint32_t wasi_snapshot_preview1_path_open(uint32_t fd, uint32_t dirflags, uint32 |
| 855 | 862 | fprintf(stderr, "fd = %u\n", fd_len); |
| 856 | 863 | #endif |
| 857 | 864 | fds[fd_len].de = de; |
| 865 | fds[fd_len].fdflags = fdflags; |
| 858 | 866 | fds[fd_len].stream = stream; |
| 867 | fds[fd_len].fs_rights_inheriting = fs_rights_inheriting; |
| 859 | 868 | *res_fd_ptr = fd_len; |
| 860 | 869 | fd_len += 1; |
| 861 | 870 | return wasi_errno_success; |