diff --git a/README.md b/README.md
index 83ad2a1..1f0a4ce 100644
--- a/README.md
+++ b/README.md
@@ -1694,13 +1694,13 @@ Members:
- When `type` is [`UVWASI_EVENTTYPE_FD_READ`](#eventtype.fd_read) or [`UVWASI_EVENTTYPE_FD_WRITE`](#eventtype.fd_write):
- - **`u.fd_readwrite`**
+ - **`fd_readwrite`**
- - [\_\_wasi\_filesize\_t](#filesize) nbytes
+ - [\_\_wasi\_filesize\_t](#filesize) nbytes
The number of bytes available for reading or writing.
- - [\_\_wasi\_eventrwflags\_t](#eventrwflags) flags
+ - [\_\_wasi\_eventrwflags\_t](#eventrwflags) flags
The state of the file descriptor.
diff --git a/include/wasi_types.h b/include/wasi_types.h
index 3b30fd3..e10e77d 100644
--- a/include/wasi_types.h
+++ b/include/wasi_types.h
@@ -169,7 +169,7 @@ typedef uint8_t uvwasi_preopentype_t;
#define UVWASI_PREOPENTYPE_DIR 0
typedef struct uvwasi_prestat_s {
- uvwasi_preopentype_t pr_type;
+ uvwasi_preopentype_t tag;
union uvwasi_prestat_u {
struct uvwasi_prestat_dir_t {
size_t pr_name_len;
@@ -236,20 +236,29 @@ typedef uint64_t uvwasi_timestamp_t;
typedef uint64_t uvwasi_userdata_t;
+typedef union uvwasi_subscription_u_u_s {
+ struct {
+ uvwasi_clockid_t clock_id;
+ uvwasi_timestamp_t timeout;
+ uvwasi_timestamp_t precision;
+ uvwasi_subclockflags_t flags;
+ } clock;
+ struct {
+ uvwasi_fd_t fd;
+ } fd_read;
+ struct {
+ uvwasi_fd_t fd;
+ } fd_write;
+} uvwasi_subscription_u_u_t;
+
+typedef struct uvwasi_subscription_u_s {
+ uvwasi_eventtype_t tag;
+ uvwasi_subscription_u_u_t u;
+} uvwasi_subscription_u_t;
+
typedef struct uvwasi_subscription_s {
uvwasi_userdata_t userdata;
- uvwasi_eventtype_t type;
- union {
- struct {
- uvwasi_clockid_t clock_id;
- uvwasi_timestamp_t timeout;
- uvwasi_timestamp_t precision;
- uvwasi_subclockflags_t flags;
- } clock;
- struct {
- uvwasi_fd_t fd;
- } fd_readwrite;
- } u;
+ uvwasi_subscription_u_t u;
} uvwasi_subscription_t;
typedef struct uvwasi_dirent_s {
@@ -278,16 +287,16 @@ typedef struct uvwasi_filestat_s {
uvwasi_timestamp_t st_ctim;
} uvwasi_filestat_t;
+typedef struct uvwasi_event_fd_readwrite_s {
+ uvwasi_filesize_t nbytes;
+ uvwasi_eventrwflags_t flags;
+} uvwasi_event_fd_readwrite_t;
+
typedef struct uvwasi_event_s {
uvwasi_userdata_t userdata;
uvwasi_errno_t error;
uvwasi_eventtype_t type;
- union {
- struct {
- uvwasi_filesize_t nbytes;
- uvwasi_eventrwflags_t flags;
- } fd_readwrite;
- } u;
+ uvwasi_event_fd_readwrite_t fd_readwrite;
} uvwasi_event_t;
typedef uint8_t uvwasi_whence_t;
diff --git a/src/uvwasi.c b/src/uvwasi.c
index 2c475c7..1631afc 100644
--- a/src/uvwasi.c
+++ b/src/uvwasi.c
@@ -1255,7 +1255,7 @@ uvwasi_errno_t uvwasi_fd_prestat_get(uvwasi_t* uvwasi,
goto exit;
}
- buf->pr_type = UVWASI_PREOPENTYPE_DIR;
+ buf->tag = UVWASI_PREOPENTYPE_DIR;
buf->u.dir.pr_name_len = strlen(wrap->path) + 1;
err = UVWASI_ESUCCESS;
exit:
diff --git a/test/test-fd-prestat-dir-name.c b/test/test-fd-prestat-dir-name.c
index 783484d..e4d2be3 100644
--- a/test/test-fd-prestat-dir-name.c
+++ b/test/test-fd-prestat-dir-name.c
@@ -35,7 +35,7 @@ int main(void) {
/* Verify uvwasi_fd_prestat_get(). */
err = uvwasi_fd_prestat_get(&uvwasi, 3, &prestat);
assert(err == 0);
- assert(prestat.pr_type == UVWASI_PREOPENTYPE_DIR);
+ assert(prestat.tag == UVWASI_PREOPENTYPE_DIR);
assert(prestat.u.dir.pr_name_len ==
strlen(init_options.preopens[0].mapped_path) + 1);