summaryrefslogtreecommitdiff
path: root/deps/uvwasi/include
diff options
context:
space:
mode:
authorcjihrig <cjihrig@gmail.com>2019-09-04 17:56:51 -0400
committerAnna Henningsen <anna@addaleax.net>2019-11-30 18:06:39 +0100
commit09b1228c3a2723c6ecb768b40a507688015a478f (patch)
tree88acbfc979bc6f73572c86e8ee804bf0fa4ad326 /deps/uvwasi/include
parent73c837b1ae91cb8852e75a921fa24c714471d690 (diff)
downloadandroid-node-v8-09b1228c3a2723c6ecb768b40a507688015a478f.tar.gz
android-node-v8-09b1228c3a2723c6ecb768b40a507688015a478f.tar.bz2
android-node-v8-09b1228c3a2723c6ecb768b40a507688015a478f.zip
wasi: introduce initial WASI support
Co-authored-by: Gus Caplan <me@gus.host> Co-authored-by: Daniel Bevenius <daniel.bevenius@gmail.com> Co-authored-by: Jiawen Geng <technicalcute@gmail.com> Co-authored-by: Tobias Nießen <tniessen@tnie.de> Co-authored-by: Chengzhong Wu <legendecas@gmail.com> PR-URL: https://github.com/nodejs/node/pull/30258 Refs: https://github.com/nodejs/node/pull/27850 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com> Reviewed-By: Guy Bedford <guybedford@gmail.com> Reviewed-By: Richard Lau <riclau@uk.ibm.com> Reviewed-By: Wyatt Preul <wpreul@gmail.com> Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Tobias Nießen <tniessen@tnie.de> Reviewed-By: Jiawen Geng <technicalcute@gmail.com> Reviewed-By: Chengzhong Wu <legendecas@gmail.com> Reviewed-By: Daniel Bevenius <daniel.bevenius@gmail.com>
Diffstat (limited to 'deps/uvwasi/include')
-rw-r--r--deps/uvwasi/include/clocks.h13
-rw-r--r--deps/uvwasi/include/fd_table.h60
-rw-r--r--deps/uvwasi/include/uv_mapping.h15
-rw-r--r--deps/uvwasi/include/uvwasi.h252
-rw-r--r--deps/uvwasi/include/wasi_types.h323
5 files changed, 663 insertions, 0 deletions
diff --git a/deps/uvwasi/include/clocks.h b/deps/uvwasi/include/clocks.h
new file mode 100644
index 0000000000..7437d03df6
--- /dev/null
+++ b/deps/uvwasi/include/clocks.h
@@ -0,0 +1,13 @@
+#ifndef __UVWASI_CLOCKS_H__
+#define __UVWASI_CLOCKS_H__
+
+#include "wasi_types.h"
+
+uvwasi_errno_t uvwasi__clock_gettime_realtime(uvwasi_timestamp_t* time);
+uvwasi_errno_t uvwasi__clock_gettime_process_cputime(uvwasi_timestamp_t* time);
+uvwasi_errno_t uvwasi__clock_gettime_thread_cputime(uvwasi_timestamp_t* time);
+
+uvwasi_errno_t uvwasi__clock_getres_process_cputime(uvwasi_timestamp_t* time);
+uvwasi_errno_t uvwasi__clock_getres_thread_cputime(uvwasi_timestamp_t* time);
+
+#endif /* __UVWASI_CLOCKS_H__ */
diff --git a/deps/uvwasi/include/fd_table.h b/deps/uvwasi/include/fd_table.h
new file mode 100644
index 0000000000..ef87a3ff8f
--- /dev/null
+++ b/deps/uvwasi/include/fd_table.h
@@ -0,0 +1,60 @@
+#ifndef __UVWASI_FD_TABLE_H__
+#define __UVWASI_FD_TABLE_H__
+
+#include <stdint.h>
+#include "uv.h"
+#include "wasi_types.h"
+#include "uv_mapping.h"
+
+/* TODO(cjihrig): PATH_MAX_BYTES shouldn't be stack allocated. On Windows, paths
+ can be 32k long, and this PATH_MAX_BYTES is an artificial limitation. */
+#ifdef _WIN32
+/* MAX_PATH is in characters, not bytes. Make sure we have enough headroom. */
+# define PATH_MAX_BYTES (MAX_PATH * 4)
+#else
+# include <limits.h>
+# define PATH_MAX_BYTES (PATH_MAX)
+#endif
+
+
+struct uvwasi_fd_wrap_t {
+ uvwasi_fd_t id;
+ uv_file fd;
+ char path[PATH_MAX_BYTES];
+ char real_path[PATH_MAX_BYTES];
+ uvwasi_filetype_t type;
+ uvwasi_rights_t rights_base;
+ uvwasi_rights_t rights_inheriting;
+ int preopen;
+ int valid;
+};
+
+struct uvwasi_fd_table_t {
+ struct uvwasi_fd_wrap_t* fds;
+ uint32_t size;
+ uint32_t used;
+};
+
+uvwasi_errno_t uvwasi_fd_table_init(struct uvwasi_fd_table_t* table,
+ uint32_t init_size);
+void uvwasi_fd_table_free(struct uvwasi_fd_table_t* table);
+uvwasi_errno_t uvwasi_fd_table_insert_preopen(struct uvwasi_fd_table_t* table,
+ const uv_file fd,
+ const char* path,
+ const char* real_path);
+uvwasi_errno_t uvwasi_fd_table_insert_fd(struct uvwasi_fd_table_t* table,
+ const uv_file fd,
+ const int flags,
+ const char* path,
+ uvwasi_rights_t rights_base,
+ uvwasi_rights_t rights_inheriting,
+ struct uvwasi_fd_wrap_t* wrap);
+uvwasi_errno_t uvwasi_fd_table_get(const struct uvwasi_fd_table_t* table,
+ const uvwasi_fd_t id,
+ struct uvwasi_fd_wrap_t** wrap,
+ uvwasi_rights_t rights_base,
+ uvwasi_rights_t rights_inheriting);
+uvwasi_errno_t uvwasi_fd_table_remove(struct uvwasi_fd_table_t* table,
+ const uvwasi_fd_t id);
+
+#endif /* __UVWASI_FD_TABLE_H__ */
diff --git a/deps/uvwasi/include/uv_mapping.h b/deps/uvwasi/include/uv_mapping.h
new file mode 100644
index 0000000000..d835ca507a
--- /dev/null
+++ b/deps/uvwasi/include/uv_mapping.h
@@ -0,0 +1,15 @@
+#ifndef __UVWASI_UV_MAPPING_H__
+#define __UVWASI_UV_MAPPING_H__
+
+#include "uv.h"
+#include "wasi_types.h"
+
+#define NANOS_PER_SEC 1000000000
+
+uvwasi_errno_t uvwasi__translate_uv_error(int err);
+int uvwasi__translate_to_uv_signal(uvwasi_signal_t sig);
+uvwasi_timestamp_t uvwasi__timespec_to_timestamp(const uv_timespec_t* ts);
+uvwasi_filetype_t uvwasi__stat_to_filetype(const uv_stat_t* stat);
+void uvwasi__stat_to_filestat(const uv_stat_t* stat, uvwasi_filestat_t* fs);
+
+#endif /* __UVWASI_UV_MAPPING_H__ */
diff --git a/deps/uvwasi/include/uvwasi.h b/deps/uvwasi/include/uvwasi.h
new file mode 100644
index 0000000000..a7695734ac
--- /dev/null
+++ b/deps/uvwasi/include/uvwasi.h
@@ -0,0 +1,252 @@
+#ifndef __UVWASI_H__
+#define __UVWASI_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "wasi_types.h"
+#include "uv_mapping.h"
+#include "fd_table.h"
+
+#define UVWASI_VERSION_MAJOR 0
+#define UVWASI_VERSION_MINOR 0
+#define UVWASI_VERSION_PATCH 1
+#define UVWASI_VERSION_HEX ((UVWASI_VERSION_MAJOR << 16) | \
+ (UVWASI_VERSION_MINOR << 8) | \
+ (UVWASI_VERSION_PATCH))
+#define UVWASI_STRINGIFY(v) UVWASI_STRINGIFY_HELPER(v)
+#define UVWASI_STRINGIFY_HELPER(v) #v
+#define UVWASI_VERSION_STRING UVWASI_STRINGIFY(UVWASI_VERSION_MAJOR) "." \
+ UVWASI_STRINGIFY(UVWASI_VERSION_MINOR) "." \
+ UVWASI_STRINGIFY(UVWASI_VERSION_PATCH)
+
+
+typedef struct uvwasi_s {
+ struct uvwasi_fd_table_t fds;
+ size_t argc;
+ char** argv;
+ char* argv_buf;
+ size_t argv_buf_size;
+ size_t envc;
+ char** env;
+ char* env_buf;
+ size_t env_buf_size;
+} uvwasi_t;
+
+typedef struct uvwasi_preopen_s {
+ char* mapped_path;
+ char* real_path;
+} uvwasi_preopen_t;
+
+typedef struct uvwasi_options_s {
+ size_t fd_table_size;
+ size_t preopenc;
+ uvwasi_preopen_t* preopens;
+ size_t argc;
+ char** argv;
+ char** envp;
+} uvwasi_options_t;
+
+
+// Embedder API.
+uvwasi_errno_t uvwasi_init(uvwasi_t* uvwasi, uvwasi_options_t* options);
+void uvwasi_destroy(uvwasi_t* uvwasi);
+uvwasi_errno_t uvwasi_embedder_remap_fd(uvwasi_t* uvwasi,
+ const uvwasi_fd_t fd,
+ uv_file new_host_fd);
+
+
+// WASI system call API.
+uvwasi_errno_t uvwasi_args_get(uvwasi_t* uvwasi, char** argv, char* argv_buf);
+uvwasi_errno_t uvwasi_args_sizes_get(uvwasi_t* uvwasi,
+ size_t* argc,
+ size_t* argv_buf_size);
+uvwasi_errno_t uvwasi_clock_res_get(uvwasi_t* uvwasi,
+ uvwasi_clockid_t clock_id,
+ uvwasi_timestamp_t* resolution);
+uvwasi_errno_t uvwasi_clock_time_get(uvwasi_t* uvwasi,
+ uvwasi_clockid_t clock_id,
+ uvwasi_timestamp_t precision,
+ uvwasi_timestamp_t* time);
+uvwasi_errno_t uvwasi_environ_get(uvwasi_t* uvwasi,
+ char** environment,
+ char* environ_buf);
+uvwasi_errno_t uvwasi_environ_sizes_get(uvwasi_t* uvwasi,
+ size_t* environ_count,
+ size_t* environ_buf_size);
+uvwasi_errno_t uvwasi_fd_advise(uvwasi_t* uvwasi,
+ uvwasi_fd_t fd,
+ uvwasi_filesize_t offset,
+ uvwasi_filesize_t len,
+ uvwasi_advice_t advice);
+uvwasi_errno_t uvwasi_fd_allocate(uvwasi_t* uvwasi,
+ uvwasi_fd_t fd,
+ uvwasi_filesize_t offset,
+ uvwasi_filesize_t len);
+uvwasi_errno_t uvwasi_fd_close(uvwasi_t* uvwasi, uvwasi_fd_t fd);
+uvwasi_errno_t uvwasi_fd_datasync(uvwasi_t* uvwasi, uvwasi_fd_t fd);
+uvwasi_errno_t uvwasi_fd_fdstat_get(uvwasi_t* uvwasi,
+ uvwasi_fd_t fd,
+ uvwasi_fdstat_t* buf);
+uvwasi_errno_t uvwasi_fd_fdstat_set_flags(uvwasi_t* uvwasi,
+ uvwasi_fd_t fd,
+ uvwasi_fdflags_t flags);
+uvwasi_errno_t uvwasi_fd_fdstat_set_rights(uvwasi_t* uvwasi,
+ uvwasi_fd_t fd,
+ uvwasi_rights_t fs_rights_base,
+ uvwasi_rights_t fs_rights_inheriting
+ );
+uvwasi_errno_t uvwasi_fd_filestat_get(uvwasi_t* uvwasi,
+ uvwasi_fd_t fd,
+ uvwasi_filestat_t* buf);
+uvwasi_errno_t uvwasi_fd_filestat_set_size(uvwasi_t* uvwasi,
+ uvwasi_fd_t fd,
+ uvwasi_filesize_t st_size);
+uvwasi_errno_t uvwasi_fd_filestat_set_times(uvwasi_t* uvwasi,
+ uvwasi_fd_t fd,
+ uvwasi_timestamp_t st_atim,
+ uvwasi_timestamp_t st_mtim,
+ uvwasi_fstflags_t fst_flags);
+uvwasi_errno_t uvwasi_fd_pread(uvwasi_t* uvwasi,
+ uvwasi_fd_t fd,
+ const uvwasi_iovec_t* iovs,
+ size_t iovs_len,
+ uvwasi_filesize_t offset,
+ size_t* nread);
+uvwasi_errno_t uvwasi_fd_prestat_get(uvwasi_t* uvwasi,
+ uvwasi_fd_t fd,
+ uvwasi_prestat_t* buf);
+uvwasi_errno_t uvwasi_fd_prestat_dir_name(uvwasi_t* uvwasi,
+ uvwasi_fd_t fd,
+ char* path,
+ size_t path_len);
+uvwasi_errno_t uvwasi_fd_pwrite(uvwasi_t* uvwasi,
+ uvwasi_fd_t fd,
+ const uvwasi_ciovec_t* iovs,
+ size_t iovs_len,
+ uvwasi_filesize_t offset,
+ size_t* nwritten);
+uvwasi_errno_t uvwasi_fd_read(uvwasi_t* uvwasi,
+ uvwasi_fd_t fd,
+ const uvwasi_iovec_t* iovs,
+ size_t iovs_len,
+ size_t* nread);
+uvwasi_errno_t uvwasi_fd_readdir(uvwasi_t* uvwasi,
+ uvwasi_fd_t fd,
+ void* buf,
+ size_t buf_len,
+ uvwasi_dircookie_t cookie,
+ size_t* bufused);
+uvwasi_errno_t uvwasi_fd_renumber(uvwasi_t* uvwasi,
+ uvwasi_fd_t from,
+ uvwasi_fd_t to);
+uvwasi_errno_t uvwasi_fd_seek(uvwasi_t* uvwasi,
+ uvwasi_fd_t fd,
+ uvwasi_filedelta_t offset,
+ uvwasi_whence_t whence,
+ uvwasi_filesize_t* newoffset);
+uvwasi_errno_t uvwasi_fd_sync(uvwasi_t* uvwasi, uvwasi_fd_t fd);
+uvwasi_errno_t uvwasi_fd_tell(uvwasi_t* uvwasi,
+ uvwasi_fd_t fd,
+ uvwasi_filesize_t* offset);
+uvwasi_errno_t uvwasi_fd_write(uvwasi_t* uvwasi,
+ uvwasi_fd_t fd,
+ const uvwasi_ciovec_t* iovs,
+ size_t iovs_len,
+ size_t* nwritten);
+uvwasi_errno_t uvwasi_path_create_directory(uvwasi_t* uvwasi,
+ uvwasi_fd_t fd,
+ const char* path,
+ size_t path_len);
+uvwasi_errno_t uvwasi_path_filestat_get(uvwasi_t* uvwasi,
+ uvwasi_fd_t fd,
+ uvwasi_lookupflags_t flags,
+ const char* path,
+ size_t path_len,
+ uvwasi_filestat_t* buf);
+uvwasi_errno_t uvwasi_path_filestat_set_times(uvwasi_t* uvwasi,
+ uvwasi_fd_t fd,
+ uvwasi_lookupflags_t flags,
+ const char* path,
+ size_t path_len,
+ uvwasi_timestamp_t st_atim,
+ uvwasi_timestamp_t st_mtim,
+ uvwasi_fstflags_t fst_flags);
+uvwasi_errno_t uvwasi_path_link(uvwasi_t* uvwasi,
+ uvwasi_fd_t old_fd,
+ uvwasi_lookupflags_t old_flags,
+ const char* old_path,
+ size_t old_path_len,
+ uvwasi_fd_t new_fd,
+ const char* new_path,
+ size_t new_path_len);
+uvwasi_errno_t uvwasi_path_open(uvwasi_t* uvwasi,
+ uvwasi_fd_t dirfd,
+ uvwasi_lookupflags_t dirflags,
+ const char* path,
+ size_t path_len,
+ uvwasi_oflags_t o_flags,
+ uvwasi_rights_t fs_rights_base,
+ uvwasi_rights_t fs_rights_inheriting,
+ uvwasi_fdflags_t fs_flags,
+ uvwasi_fd_t* fd);
+uvwasi_errno_t uvwasi_path_readlink(uvwasi_t* uvwasi,
+ uvwasi_fd_t fd,
+ const char* path,
+ size_t path_len,
+ char* buf,
+ size_t buf_len,
+ size_t* bufused);
+uvwasi_errno_t uvwasi_path_remove_directory(uvwasi_t* uvwasi,
+ uvwasi_fd_t fd,
+ const char* path,
+ size_t path_len);
+uvwasi_errno_t uvwasi_path_rename(uvwasi_t* uvwasi,
+ uvwasi_fd_t old_fd,
+ const char* old_path,
+ size_t old_path_len,
+ uvwasi_fd_t new_fd,
+ const char* new_path,
+ size_t new_path_len);
+uvwasi_errno_t uvwasi_path_symlink(uvwasi_t* uvwasi,
+ const char* old_path,
+ size_t old_path_len,
+ uvwasi_fd_t fd,
+ const char* new_path,
+ size_t new_path_len);
+uvwasi_errno_t uvwasi_path_unlink_file(uvwasi_t* uvwasi,
+ uvwasi_fd_t fd,
+ const char* path,
+ size_t path_len);
+uvwasi_errno_t uvwasi_poll_oneoff(uvwasi_t* uvwasi,
+ const uvwasi_subscription_t* in,
+ uvwasi_event_t* out,
+ size_t nsubscriptions,
+ size_t* nevents);
+uvwasi_errno_t uvwasi_proc_exit(uvwasi_t* uvwasi, uvwasi_exitcode_t rval);
+uvwasi_errno_t uvwasi_proc_raise(uvwasi_t* uvwasi, uvwasi_signal_t sig);
+uvwasi_errno_t uvwasi_random_get(uvwasi_t* uvwasi, void* buf, size_t buf_len);
+uvwasi_errno_t uvwasi_sched_yield(uvwasi_t* uvwasi);
+uvwasi_errno_t uvwasi_sock_recv(uvwasi_t* uvwasi,
+ uvwasi_fd_t sock,
+ const uvwasi_iovec_t* ri_data,
+ size_t ri_data_len,
+ uvwasi_riflags_t ri_flags,
+ size_t* ro_datalen,
+ uvwasi_roflags_t* ro_flags);
+uvwasi_errno_t uvwasi_sock_send(uvwasi_t* uvwasi,
+ uvwasi_fd_t sock,
+ const uvwasi_ciovec_t* si_data,
+ size_t si_data_len,
+ uvwasi_siflags_t si_flags,
+ size_t* so_datalen);
+uvwasi_errno_t uvwasi_sock_shutdown(uvwasi_t* uvwasi,
+ uvwasi_fd_t sock,
+ uvwasi_sdflags_t how);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __UVWASI_H__ */
diff --git a/deps/uvwasi/include/wasi_types.h b/deps/uvwasi/include/wasi_types.h
new file mode 100644
index 0000000000..34b5291c57
--- /dev/null
+++ b/deps/uvwasi/include/wasi_types.h
@@ -0,0 +1,323 @@
+#ifndef __UVWASI_WASI_TYPES_H__
+#define __UVWASI_WASI_TYPES_H__
+
+#include <stddef.h>
+#include <stdint.h>
+
+/* API: https://github.com/WebAssembly/WASI/blob/master/phases/unstable/docs/wasi_unstable_preview0.md */
+
+typedef uint8_t uvwasi_advice_t;
+#define UVWASI_ADVICE_NORMAL 0
+#define UVWASI_ADVICE_SEQUENTIAL 1
+#define UVWASI_ADVICE_RANDOM 2
+#define UVWASI_ADVICE_WILLNEED 3
+#define UVWASI_ADVICE_DONTNEED 4
+#define UVWASI_ADVICE_NOREUSE 5
+
+typedef struct uvwasi_ciovec_s {
+ const void* buf;
+ size_t buf_len;
+} uvwasi_ciovec_t;
+
+typedef uint32_t uvwasi_clockid_t;
+#define UVWASI_CLOCK_REALTIME 0
+#define UVWASI_CLOCK_MONOTONIC 1
+#define UVWASI_CLOCK_PROCESS_CPUTIME_ID 2
+#define UVWASI_CLOCK_THREAD_CPUTIME_ID 3
+
+typedef uint64_t uvwasi_device_t;
+
+typedef uint64_t uvwasi_dircookie_t;
+#define UVWASI_DIRCOOKIE_START 0
+
+typedef uint16_t uvwasi_errno_t;
+#define UVWASI_ESUCCESS 0
+#define UVWASI_E2BIG 1
+#define UVWASI_EACCES 2
+#define UVWASI_EADDRINUSE 3
+#define UVWASI_EADDRNOTAVAIL 4
+#define UVWASI_EAFNOSUPPORT 5
+#define UVWASI_EAGAIN 6
+#define UVWASI_EALREADY 7
+#define UVWASI_EBADF 8
+#define UVWASI_EBADMSG 9
+#define UVWASI_EBUSY 10
+#define UVWASI_ECANCELED 11
+#define UVWASI_ECHILD 12
+#define UVWASI_ECONNABORTED 13
+#define UVWASI_ECONNREFUSED 14
+#define UVWASI_ECONNRESET 15
+#define UVWASI_EDEADLK 16
+#define UVWASI_EDESTADDRREQ 17
+#define UVWASI_EDOM 18
+#define UVWASI_EDQUOT 19
+#define UVWASI_EEXIST 20
+#define UVWASI_EFAULT 21
+#define UVWASI_EFBIG 22
+#define UVWASI_EHOSTUNREACH 23
+#define UVWASI_EIDRM 24
+#define UVWASI_EILSEQ 25
+#define UVWASI_EINPROGRESS 26
+#define UVWASI_EINTR 27
+#define UVWASI_EINVAL 28
+#define UVWASI_EIO 29
+#define UVWASI_EISCONN 30
+#define UVWASI_EISDIR 31
+#define UVWASI_ELOOP 32
+#define UVWASI_EMFILE 33
+#define UVWASI_EMLINK 34
+#define UVWASI_EMSGSIZE 35
+#define UVWASI_EMULTIHOP 36
+#define UVWASI_ENAMETOOLONG 37
+#define UVWASI_ENETDOWN 38
+#define UVWASI_ENETRESET 39
+#define UVWASI_ENETUNREACH 40
+#define UVWASI_ENFILE 41
+#define UVWASI_ENOBUFS 42
+#define UVWASI_ENODEV 43
+#define UVWASI_ENOENT 44
+#define UVWASI_ENOEXEC 45
+#define UVWASI_ENOLCK 46
+#define UVWASI_ENOLINK 47
+#define UVWASI_ENOMEM 48
+#define UVWASI_ENOMSG 49
+#define UVWASI_ENOPROTOOPT 50
+#define UVWASI_ENOSPC 51
+#define UVWASI_ENOSYS 52
+#define UVWASI_ENOTCONN 53
+#define UVWASI_ENOTDIR 54
+#define UVWASI_ENOTEMPTY 55
+#define UVWASI_ENOTRECOVERABLE 56
+#define UVWASI_ENOTSOCK 57
+#define UVWASI_ENOTSUP 58
+#define UVWASI_ENOTTY 59
+#define UVWASI_ENXIO 60
+#define UVWASI_EOVERFLOW 61
+#define UVWASI_EOWNERDEAD 62
+#define UVWASI_EPERM 63
+#define UVWASI_EPIPE 64
+#define UVWASI_EPROTO 65
+#define UVWASI_EPROTONOSUPPORT 66
+#define UVWASI_EPROTOTYPE 67
+#define UVWASI_ERANGE 68
+#define UVWASI_EROFS 69
+#define UVWASI_ESPIPE 70
+#define UVWASI_ESRCH 71
+#define UVWASI_ESTALE 72
+#define UVWASI_ETIMEDOUT 73
+#define UVWASI_ETXTBSY 74
+#define UVWASI_EXDEV 75
+#define UVWASI_ENOTCAPABLE 76
+
+typedef uint16_t uvwasi_eventrwflags_t; /* Bitfield */
+#define UVWASI_EVENT_FD_READWRITE_HANGUP (1 << 0)
+
+typedef uint8_t uvwasi_eventtype_t;
+#define UVWASI_EVENTTYPE_CLOCK 0
+#define UVWASI_EVENTTYPE_FD_READ 1
+#define UVWASI_EVENTTYPE_FD_WRITE 2
+
+typedef uint32_t uvwasi_exitcode_t;
+
+typedef uint32_t uvwasi_fd_t;
+
+typedef uint16_t uvwasi_fdflags_t; /* Bitfield */
+#define UVWASI_FDFLAG_APPEND (1 << 0)
+#define UVWASI_FDFLAG_DSYNC (1 << 1)
+#define UVWASI_FDFLAG_NONBLOCK (1 << 2)
+#define UVWASI_FDFLAG_RSYNC (1 << 3)
+#define UVWASI_FDFLAG_SYNC (1 << 4)
+
+typedef int64_t uvwasi_filedelta_t;
+
+typedef uint64_t uvwasi_filesize_t;
+
+typedef uint8_t uvwasi_filetype_t;
+#define UVWASI_FILETYPE_UNKNOWN 0
+#define UVWASI_FILETYPE_BLOCK_DEVICE 1
+#define UVWASI_FILETYPE_CHARACTER_DEVICE 2
+#define UVWASI_FILETYPE_DIRECTORY 3
+#define UVWASI_FILETYPE_REGULAR_FILE 4
+#define UVWASI_FILETYPE_SOCKET_DGRAM 5
+#define UVWASI_FILETYPE_SOCKET_STREAM 6
+#define UVWASI_FILETYPE_SYMBOLIC_LINK 7
+
+typedef uint16_t uvwasi_fstflags_t; /* Bitfield */
+#define UVWASI_FILESTAT_SET_ATIM (1 << 0)
+#define UVWASI_FILESTAT_SET_ATIM_NOW (1 << 1)
+#define UVWASI_FILESTAT_SET_MTIM (1 << 2)
+#define UVWASI_FILESTAT_SET_MTIM_NOW (1 << 3)
+
+typedef uint64_t uvwasi_inode_t;
+
+typedef struct uvwasi_iovec_s {
+ void* buf;
+ size_t buf_len;
+} uvwasi_iovec_t;
+
+typedef uint32_t uvwasi_linkcount_t;
+
+typedef uint32_t uvwasi_lookupflags_t; /* Bitfield */
+#define UVWASI_LOOKUP_SYMLINK_FOLLOW (1 << 0)
+
+typedef uint16_t uvwasi_oflags_t; /* Bitfield */
+#define UVWASI_O_CREAT (1 << 0)
+#define UVWASI_O_DIRECTORY (1 << 1)
+#define UVWASI_O_EXCL (1 << 2)
+#define UVWASI_O_TRUNC (1 << 3)
+
+typedef uint8_t uvwasi_preopentype_t;
+#define UVWASI_PREOPENTYPE_DIR 0
+
+typedef struct uvwasi_prestat_s {
+ uvwasi_preopentype_t pr_type;
+ union uvwasi_prestat_u {
+ struct uvwasi_prestat_dir_t {
+ size_t pr_name_len;
+ } dir;
+ } u;
+} uvwasi_prestat_t;
+
+typedef uint16_t uvwasi_riflags_t; /* Bitfield */
+#define UVWASI_SOCK_RECV_PEEK (1 << 0)
+#define UVWASI_SOCK_RECV_WAITALL (1 << 1)
+
+typedef uint64_t uvwasi_rights_t; /* Bitfield */
+#define UVWASI_RIGHT_FD_DATASYNC (1 << 0)
+#define UVWASI_RIGHT_FD_READ (1 << 1)
+#define UVWASI_RIGHT_FD_SEEK (1 << 2)
+#define UVWASI_RIGHT_FD_FDSTAT_SET_FLAGS (1 << 3)
+#define UVWASI_RIGHT_FD_SYNC (1 << 4)
+#define UVWASI_RIGHT_FD_TELL (1 << 5)
+#define UVWASI_RIGHT_FD_WRITE (1 << 6)
+#define UVWASI_RIGHT_FD_ADVISE (1 << 7)
+#define UVWASI_RIGHT_FD_ALLOCATE (1 << 8)
+#define UVWASI_RIGHT_PATH_CREATE_DIRECTORY (1 << 9)
+#define UVWASI_RIGHT_PATH_CREATE_FILE (1 << 10)
+#define UVWASI_RIGHT_PATH_LINK_SOURCE (1 << 11)
+#define UVWASI_RIGHT_PATH_LINK_TARGET (1 << 12)
+#define UVWASI_RIGHT_PATH_OPEN (1 << 13)
+#define UVWASI_RIGHT_FD_READDIR (1 << 14)
+#define UVWASI_RIGHT_PATH_READLINK (1 << 15)
+#define UVWASI_RIGHT_PATH_RENAME_SOURCE (1 << 16)
+#define UVWASI_RIGHT_PATH_RENAME_TARGET (1 << 17)
+#define UVWASI_RIGHT_PATH_FILESTAT_GET (1 << 18)
+#define UVWASI_RIGHT_PATH_FILESTAT_SET_SIZE (1 << 19)
+#define UVWASI_RIGHT_PATH_FILESTAT_SET_TIMES (1 << 20)
+#define UVWASI_RIGHT_FD_FILESTAT_GET (1 << 21)
+#define UVWASI_RIGHT_FD_FILESTAT_SET_SIZE (1 << 22)
+#define UVWASI_RIGHT_FD_FILESTAT_SET_TIMES (1 << 23)
+#define UVWASI_RIGHT_PATH_SYMLINK (1 << 24)
+#define UVWASI_RIGHT_PATH_REMOVE_DIRECTORY (1 << 25)
+#define UVWASI_RIGHT_PATH_UNLINK_FILE (1 << 26)
+#define UVWASI_RIGHT_POLL_FD_READWRITE (1 << 27)
+#define UVWASI_RIGHT_SOCK_SHUTDOWN (1 << 28)
+
+typedef uint16_t uvwasi_roflags_t; /* Bitfield */
+#define UVWASI_SOCK_RECV_DATA_TRUNCATED (1 << 0)
+
+typedef uint8_t uvwasi_sdflags_t; /* Bitfield */
+#define UVWASI_SHUT_RD (1 << 0)
+#define UVWASI_SHUT_WR (1 << 1)
+
+typedef uint16_t uvwasi_siflags_t; /* Bitfield */
+
+typedef uint8_t uvwasi_signal_t;
+#define UVWASI_SIGHUP 1
+#define UVWASI_SIGINT 2
+#define UVWASI_SIGQUIT 3
+#define UVWASI_SIGILL 4
+#define UVWASI_SIGTRAP 5
+#define UVWASI_SIGABRT 6
+#define UVWASI_SIGBUS 7
+#define UVWASI_SIGFPE 8
+#define UVWASI_SIGKILL 9
+#define UVWASI_SIGUSR1 10
+#define UVWASI_SIGSEGV 11
+#define UVWASI_SIGUSR2 12
+#define UVWASI_SIGPIPE 13
+#define UVWASI_SIGALRM 14
+#define UVWASI_SIGTERM 15
+#define UVWASI_SIGCHLD 16
+#define UVWASI_SIGCONT 17
+#define UVWASI_SIGSTOP 18
+#define UVWASI_SIGTSTP 19
+#define UVWASI_SIGTTIN 20
+#define UVWASI_SIGTTOU 21
+#define UVWASI_SIGURG 22
+#define UVWASI_SIGXCPU 23
+#define UVWASI_SIGXFSZ 24
+#define UVWASI_SIGVTALRM 25
+#define UVWASI_SIGPROF 26
+#define UVWASI_SIGWINCH 27
+#define UVWASI_SIGPOLL 28
+#define UVWASI_SIGPWR 29
+#define UVWASI_SIGSYS 30
+
+typedef uint16_t uvwasi_subclockflags_t; /* Bitfield */
+#define UVWASI_SUBSCRIPTION_CLOCK_ABSTIME (1 << 0)
+
+typedef uint64_t uvwasi_timestamp_t;
+
+typedef uint64_t uvwasi_userdata_t;
+
+typedef struct uvwasi_subscription_s {
+ uvwasi_userdata_t userdata;
+ uvwasi_eventtype_t type;
+ union {
+ struct {
+ uvwasi_userdata_t identifier;
+ 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_t;
+
+typedef struct uvwasi_dirent_s {
+ uvwasi_dircookie_t d_next;
+ uvwasi_inode_t d_ino;
+ uint32_t d_namlen;
+ uvwasi_filetype_t d_type;
+} uvwasi_dirent_t;
+
+typedef struct uvwasi_fdstat_s {
+ uvwasi_filetype_t fs_filetype;
+ uvwasi_fdflags_t fs_flags;
+ uvwasi_rights_t fs_rights_base;
+ uvwasi_rights_t fs_rights_inheriting;
+} uvwasi_fdstat_t;
+
+typedef struct uvwasi_filestat_s {
+ uvwasi_device_t st_dev;
+ uvwasi_inode_t st_ino;
+ uvwasi_filetype_t st_filetype;
+ uvwasi_linkcount_t st_nlink;
+ uvwasi_filesize_t st_size;
+ uvwasi_timestamp_t st_atim;
+ uvwasi_timestamp_t st_mtim;
+ uvwasi_timestamp_t st_ctim;
+} uvwasi_filestat_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_t;
+
+typedef uint8_t uvwasi_whence_t;
+#define UVWASI_WHENCE_CUR 0
+#define UVWASI_WHENCE_END 1
+#define UVWASI_WHENCE_SET 2
+
+#endif /* __UVWASI_WASI_TYPES_H__ */