1#ifndef __UVWASI_H__ 2#define __UVWASI_H__ 3 4#ifdef __cplusplus 5extern "C" { 6#endif 7 8#include "uv.h" 9#include "wasi_serdes.h" 10#include "wasi_types.h" 11 12#define UVWASI_VERSION_MAJOR 0 13#define UVWASI_VERSION_MINOR 0 14#define UVWASI_VERSION_PATCH 19 15#define UVWASI_VERSION_HEX ((UVWASI_VERSION_MAJOR << 16) | \ 16 (UVWASI_VERSION_MINOR << 8) | \ 17 (UVWASI_VERSION_PATCH)) 18#define UVWASI_STRINGIFY(v) UVWASI_STRINGIFY_HELPER(v) 19#define UVWASI_STRINGIFY_HELPER(v) #v 20#define UVWASI_VERSION_STRING UVWASI_STRINGIFY(UVWASI_VERSION_MAJOR) "." \ 21 UVWASI_STRINGIFY(UVWASI_VERSION_MINOR) "." \ 22 UVWASI_STRINGIFY(UVWASI_VERSION_PATCH) 23#define UVWASI_VERSION_WASI "snapshot_1" 24 25typedef void* (*uvwasi_malloc)(size_t size, void* mem_user_data); 26typedef void (*uvwasi_free)(void* ptr, void* mem_user_data); 27typedef void* (*uvwasi_calloc)(size_t nmemb, size_t size, void* mem_user_data); 28typedef void* (*uvwasi_realloc)(void* ptr, size_t size, void* mem_user_data); 29 30typedef struct uvwasi_mem_s { 31 void* mem_user_data; 32 uvwasi_malloc malloc; 33 uvwasi_free free; 34 uvwasi_calloc calloc; 35 uvwasi_realloc realloc; 36} uvwasi_mem_t; 37 38struct uvwasi_fd_table_t; 39 40typedef struct uvwasi_s { 41 struct uvwasi_fd_table_t* fds; 42 uvwasi_size_t argc; 43 char** argv; 44 char* argv_buf; 45 uvwasi_size_t argv_buf_size; 46 uvwasi_size_t envc; 47 char** env; 48 char* env_buf; 49 uvwasi_size_t env_buf_size; 50 const uvwasi_mem_t* allocator; 51 uv_loop_t* loop; 52} uvwasi_t; 53 54typedef struct uvwasi_preopen_s { 55 const char* mapped_path; 56 const char* real_path; 57} uvwasi_preopen_t; 58 59typedef struct uvwasi_preopen_socket_s { 60 const char* address; 61 int port; 62} uvwasi_preopen_socket_t; 63 64typedef struct uvwasi_options_s { 65 uvwasi_size_t fd_table_size; 66 uvwasi_size_t preopenc; 67 uvwasi_preopen_t* preopens; 68 uvwasi_size_t preopen_socketc; 69 uvwasi_preopen_socket_t* preopen_sockets; 70 uvwasi_size_t argc; 71 const char** argv; 72 const char** envp; 73 uvwasi_fd_t in; 74 uvwasi_fd_t out; 75 uvwasi_fd_t err; 76 const uvwasi_mem_t* allocator; 77} uvwasi_options_t; 78 79/* Embedder API. */ 80uvwasi_errno_t uvwasi_init(uvwasi_t* uvwasi, const uvwasi_options_t* options); 81void uvwasi_destroy(uvwasi_t* uvwasi); 82void uvwasi_options_init(uvwasi_options_t* options); 83/* Use int instead of uv_file to avoid needing uv.h */ 84uvwasi_errno_t uvwasi_embedder_remap_fd(uvwasi_t* uvwasi, 85 const uvwasi_fd_t fd, 86 int new_host_fd); 87const char* uvwasi_embedder_err_code_to_string(uvwasi_errno_t code); 88 89 90/* WASI system call API. */ 91uvwasi_errno_t uvwasi_args_get(uvwasi_t* uvwasi, char** argv, char* argv_buf); 92uvwasi_errno_t uvwasi_args_sizes_get(uvwasi_t* uvwasi, 93 uvwasi_size_t* argc, 94 uvwasi_size_t* argv_buf_size); 95uvwasi_errno_t uvwasi_clock_res_get(uvwasi_t* uvwasi, 96 uvwasi_clockid_t clock_id, 97 uvwasi_timestamp_t* resolution); 98uvwasi_errno_t uvwasi_clock_time_get(uvwasi_t* uvwasi, 99 uvwasi_clockid_t clock_id, 100 uvwasi_timestamp_t precision, 101 uvwasi_timestamp_t* time); 102uvwasi_errno_t uvwasi_environ_get(uvwasi_t* uvwasi, 103 char** environment, 104 char* environ_buf); 105uvwasi_errno_t uvwasi_environ_sizes_get(uvwasi_t* uvwasi, 106 uvwasi_size_t* environ_count, 107 uvwasi_size_t* environ_buf_size); 108uvwasi_errno_t uvwasi_fd_advise(uvwasi_t* uvwasi, 109 uvwasi_fd_t fd, 110 uvwasi_filesize_t offset, 111 uvwasi_filesize_t len, 112 uvwasi_advice_t advice); 113uvwasi_errno_t uvwasi_fd_allocate(uvwasi_t* uvwasi, 114 uvwasi_fd_t fd, 115 uvwasi_filesize_t offset, 116 uvwasi_filesize_t len); 117uvwasi_errno_t uvwasi_fd_close(uvwasi_t* uvwasi, uvwasi_fd_t fd); 118uvwasi_errno_t uvwasi_fd_datasync(uvwasi_t* uvwasi, uvwasi_fd_t fd); 119uvwasi_errno_t uvwasi_fd_fdstat_get(uvwasi_t* uvwasi, 120 uvwasi_fd_t fd, 121 uvwasi_fdstat_t* buf); 122uvwasi_errno_t uvwasi_fd_fdstat_set_flags(uvwasi_t* uvwasi, 123 uvwasi_fd_t fd, 124 uvwasi_fdflags_t flags); 125uvwasi_errno_t uvwasi_fd_fdstat_set_rights(uvwasi_t* uvwasi, 126 uvwasi_fd_t fd, 127 uvwasi_rights_t fs_rights_base, 128 uvwasi_rights_t fs_rights_inheriting 129 ); 130uvwasi_errno_t uvwasi_fd_filestat_get(uvwasi_t* uvwasi, 131 uvwasi_fd_t fd, 132 uvwasi_filestat_t* buf); 133uvwasi_errno_t uvwasi_fd_filestat_set_size(uvwasi_t* uvwasi, 134 uvwasi_fd_t fd, 135 uvwasi_filesize_t st_size); 136uvwasi_errno_t uvwasi_fd_filestat_set_times(uvwasi_t* uvwasi, 137 uvwasi_fd_t fd, 138 uvwasi_timestamp_t st_atim, 139 uvwasi_timestamp_t st_mtim, 140 uvwasi_fstflags_t fst_flags); 141uvwasi_errno_t uvwasi_fd_pread(uvwasi_t* uvwasi, 142 uvwasi_fd_t fd, 143 const uvwasi_iovec_t* iovs, 144 uvwasi_size_t iovs_len, 145 uvwasi_filesize_t offset, 146 uvwasi_size_t* nread); 147uvwasi_errno_t uvwasi_fd_prestat_get(uvwasi_t* uvwasi, 148 uvwasi_fd_t fd, 149 uvwasi_prestat_t* buf); 150uvwasi_errno_t uvwasi_fd_prestat_dir_name(uvwasi_t* uvwasi, 151 uvwasi_fd_t fd, 152 char* path, 153 uvwasi_size_t path_len); 154uvwasi_errno_t uvwasi_fd_pwrite(uvwasi_t* uvwasi, 155 uvwasi_fd_t fd, 156 const uvwasi_ciovec_t* iovs, 157 uvwasi_size_t iovs_len, 158 uvwasi_filesize_t offset, 159 uvwasi_size_t* nwritten); 160uvwasi_errno_t uvwasi_fd_read(uvwasi_t* uvwasi, 161 uvwasi_fd_t fd, 162 const uvwasi_iovec_t* iovs, 163 uvwasi_size_t iovs_len, 164 uvwasi_size_t* nread); 165uvwasi_errno_t uvwasi_fd_readdir(uvwasi_t* uvwasi, 166 uvwasi_fd_t fd, 167 void* buf, 168 uvwasi_size_t buf_len, 169 uvwasi_dircookie_t cookie, 170 uvwasi_size_t* bufused); 171uvwasi_errno_t uvwasi_fd_renumber(uvwasi_t* uvwasi, 172 uvwasi_fd_t from, 173 uvwasi_fd_t to); 174uvwasi_errno_t uvwasi_fd_seek(uvwasi_t* uvwasi, 175 uvwasi_fd_t fd, 176 uvwasi_filedelta_t offset, 177 uvwasi_whence_t whence, 178 uvwasi_filesize_t* newoffset); 179uvwasi_errno_t uvwasi_fd_sync(uvwasi_t* uvwasi, uvwasi_fd_t fd); 180uvwasi_errno_t uvwasi_fd_tell(uvwasi_t* uvwasi, 181 uvwasi_fd_t fd, 182 uvwasi_filesize_t* offset); 183uvwasi_errno_t uvwasi_fd_write(uvwasi_t* uvwasi, 184 uvwasi_fd_t fd, 185 const uvwasi_ciovec_t* iovs, 186 uvwasi_size_t iovs_len, 187 uvwasi_size_t* nwritten); 188uvwasi_errno_t uvwasi_path_create_directory(uvwasi_t* uvwasi, 189 uvwasi_fd_t fd, 190 const char* path, 191 uvwasi_size_t path_len); 192uvwasi_errno_t uvwasi_path_filestat_get(uvwasi_t* uvwasi, 193 uvwasi_fd_t fd, 194 uvwasi_lookupflags_t flags, 195 const char* path, 196 uvwasi_size_t path_len, 197 uvwasi_filestat_t* buf); 198uvwasi_errno_t uvwasi_path_filestat_set_times(uvwasi_t* uvwasi, 199 uvwasi_fd_t fd, 200 uvwasi_lookupflags_t flags, 201 const char* path, 202 uvwasi_size_t path_len, 203 uvwasi_timestamp_t st_atim, 204 uvwasi_timestamp_t st_mtim, 205 uvwasi_fstflags_t fst_flags); 206uvwasi_errno_t uvwasi_path_link(uvwasi_t* uvwasi, 207 uvwasi_fd_t old_fd, 208 uvwasi_lookupflags_t old_flags, 209 const char* old_path, 210 uvwasi_size_t old_path_len, 211 uvwasi_fd_t new_fd, 212 const char* new_path, 213 uvwasi_size_t new_path_len); 214uvwasi_errno_t uvwasi_path_open(uvwasi_t* uvwasi, 215 uvwasi_fd_t dirfd, 216 uvwasi_lookupflags_t dirflags, 217 const char* path, 218 uvwasi_size_t path_len, 219 uvwasi_oflags_t o_flags, 220 uvwasi_rights_t fs_rights_base, 221 uvwasi_rights_t fs_rights_inheriting, 222 uvwasi_fdflags_t fs_flags, 223 uvwasi_fd_t* fd); 224uvwasi_errno_t uvwasi_path_readlink(uvwasi_t* uvwasi, 225 uvwasi_fd_t fd, 226 const char* path, 227 uvwasi_size_t path_len, 228 char* buf, 229 uvwasi_size_t buf_len, 230 uvwasi_size_t* bufused); 231uvwasi_errno_t uvwasi_path_remove_directory(uvwasi_t* uvwasi, 232 uvwasi_fd_t fd, 233 const char* path, 234 uvwasi_size_t path_len); 235uvwasi_errno_t uvwasi_path_rename(uvwasi_t* uvwasi, 236 uvwasi_fd_t old_fd, 237 const char* old_path, 238 uvwasi_size_t old_path_len, 239 uvwasi_fd_t new_fd, 240 const char* new_path, 241 uvwasi_size_t new_path_len); 242uvwasi_errno_t uvwasi_path_symlink(uvwasi_t* uvwasi, 243 const char* old_path, 244 uvwasi_size_t old_path_len, 245 uvwasi_fd_t fd, 246 const char* new_path, 247 uvwasi_size_t new_path_len); 248uvwasi_errno_t uvwasi_path_unlink_file(uvwasi_t* uvwasi, 249 uvwasi_fd_t fd, 250 const char* path, 251 uvwasi_size_t path_len); 252uvwasi_errno_t uvwasi_poll_oneoff(uvwasi_t* uvwasi, 253 const uvwasi_subscription_t* in, 254 uvwasi_event_t* out, 255 uvwasi_size_t nsubscriptions, 256 uvwasi_size_t* nevents); 257uvwasi_errno_t uvwasi_proc_exit(uvwasi_t* uvwasi, uvwasi_exitcode_t rval); 258uvwasi_errno_t uvwasi_proc_raise(uvwasi_t* uvwasi, uvwasi_signal_t sig); 259uvwasi_errno_t uvwasi_random_get(uvwasi_t* uvwasi, 260 void* buf, 261 uvwasi_size_t buf_len); 262uvwasi_errno_t uvwasi_sched_yield(uvwasi_t* uvwasi); 263uvwasi_errno_t uvwasi_sock_accept(uvwasi_t* uvwasi, 264 uvwasi_fd_t sock, 265 uvwasi_fdflags_t flags, 266 uvwasi_fd_t* fd); 267uvwasi_errno_t uvwasi_sock_recv(uvwasi_t* uvwasi, 268 uvwasi_fd_t sock, 269 const uvwasi_iovec_t* ri_data, 270 uvwasi_size_t ri_data_len, 271 uvwasi_riflags_t ri_flags, 272 uvwasi_size_t* ro_datalen, 273 uvwasi_roflags_t* ro_flags); 274uvwasi_errno_t uvwasi_sock_send(uvwasi_t* uvwasi, 275 uvwasi_fd_t sock, 276 const uvwasi_ciovec_t* si_data, 277 uvwasi_size_t si_data_len, 278 uvwasi_siflags_t si_flags, 279 uvwasi_size_t* so_datalen); 280uvwasi_errno_t uvwasi_sock_shutdown(uvwasi_t* uvwasi, 281 uvwasi_fd_t sock, 282 uvwasi_sdflags_t how); 283 284#ifdef __cplusplus 285} 286#endif 287 288#endif /* __UVWASI_H__ */ 289