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