• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef __UVWASI_H__
2 #define __UVWASI_H__
3 
4 #ifdef __cplusplus
5 extern "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 
25 typedef void* (*uvwasi_malloc)(size_t size, void* mem_user_data);
26 typedef void (*uvwasi_free)(void* ptr, void* mem_user_data);
27 typedef void* (*uvwasi_calloc)(size_t nmemb, size_t size, void* mem_user_data);
28 typedef void* (*uvwasi_realloc)(void* ptr, size_t size, void* mem_user_data);
29 
30 typedef 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 
38 struct uvwasi_fd_table_t;
39 
40 typedef 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 
54 typedef struct uvwasi_preopen_s {
55   const char* mapped_path;
56   const char* real_path;
57 } uvwasi_preopen_t;
58 
59 typedef struct uvwasi_preopen_socket_s {
60   const char* address;
61   int port;
62 } uvwasi_preopen_socket_t;
63 
64 typedef 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. */
80 uvwasi_errno_t uvwasi_init(uvwasi_t* uvwasi, const uvwasi_options_t* options);
81 void uvwasi_destroy(uvwasi_t* uvwasi);
82 void uvwasi_options_init(uvwasi_options_t* options);
83 /* Use int instead of uv_file to avoid needing uv.h */
84 uvwasi_errno_t uvwasi_embedder_remap_fd(uvwasi_t* uvwasi,
85                                         const uvwasi_fd_t fd,
86                                         int new_host_fd);
87 const char* uvwasi_embedder_err_code_to_string(uvwasi_errno_t code);
88 
89 
90 /* WASI system call API. */
91 uvwasi_errno_t uvwasi_args_get(uvwasi_t* uvwasi, char** argv, char* argv_buf);
92 uvwasi_errno_t uvwasi_args_sizes_get(uvwasi_t* uvwasi,
93                                      uvwasi_size_t* argc,
94                                      uvwasi_size_t* argv_buf_size);
95 uvwasi_errno_t uvwasi_clock_res_get(uvwasi_t* uvwasi,
96                                     uvwasi_clockid_t clock_id,
97                                     uvwasi_timestamp_t* resolution);
98 uvwasi_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);
102 uvwasi_errno_t uvwasi_environ_get(uvwasi_t* uvwasi,
103                                   char** environment,
104                                   char* environ_buf);
105 uvwasi_errno_t uvwasi_environ_sizes_get(uvwasi_t* uvwasi,
106                                         uvwasi_size_t* environ_count,
107                                         uvwasi_size_t* environ_buf_size);
108 uvwasi_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);
113 uvwasi_errno_t uvwasi_fd_allocate(uvwasi_t* uvwasi,
114                                   uvwasi_fd_t fd,
115                                   uvwasi_filesize_t offset,
116                                   uvwasi_filesize_t len);
117 uvwasi_errno_t uvwasi_fd_close(uvwasi_t* uvwasi, uvwasi_fd_t fd);
118 uvwasi_errno_t uvwasi_fd_datasync(uvwasi_t* uvwasi, uvwasi_fd_t fd);
119 uvwasi_errno_t uvwasi_fd_fdstat_get(uvwasi_t* uvwasi,
120                                     uvwasi_fd_t fd,
121                                     uvwasi_fdstat_t* buf);
122 uvwasi_errno_t uvwasi_fd_fdstat_set_flags(uvwasi_t* uvwasi,
123                                           uvwasi_fd_t fd,
124                                           uvwasi_fdflags_t flags);
125 uvwasi_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                                           );
130 uvwasi_errno_t uvwasi_fd_filestat_get(uvwasi_t* uvwasi,
131                                       uvwasi_fd_t fd,
132                                       uvwasi_filestat_t* buf);
133 uvwasi_errno_t uvwasi_fd_filestat_set_size(uvwasi_t* uvwasi,
134                                            uvwasi_fd_t fd,
135                                            uvwasi_filesize_t st_size);
136 uvwasi_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);
141 uvwasi_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);
147 uvwasi_errno_t uvwasi_fd_prestat_get(uvwasi_t* uvwasi,
148                                      uvwasi_fd_t fd,
149                                      uvwasi_prestat_t* buf);
150 uvwasi_errno_t uvwasi_fd_prestat_dir_name(uvwasi_t* uvwasi,
151                                           uvwasi_fd_t fd,
152                                           char* path,
153                                           uvwasi_size_t path_len);
154 uvwasi_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);
160 uvwasi_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);
165 uvwasi_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);
171 uvwasi_errno_t uvwasi_fd_renumber(uvwasi_t* uvwasi,
172                                   uvwasi_fd_t from,
173                                   uvwasi_fd_t to);
174 uvwasi_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);
179 uvwasi_errno_t uvwasi_fd_sync(uvwasi_t* uvwasi, uvwasi_fd_t fd);
180 uvwasi_errno_t uvwasi_fd_tell(uvwasi_t* uvwasi,
181                               uvwasi_fd_t fd,
182                               uvwasi_filesize_t* offset);
183 uvwasi_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);
188 uvwasi_errno_t uvwasi_path_create_directory(uvwasi_t* uvwasi,
189                                             uvwasi_fd_t fd,
190                                             const char* path,
191                                             uvwasi_size_t path_len);
192 uvwasi_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);
198 uvwasi_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);
206 uvwasi_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);
214 uvwasi_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);
224 uvwasi_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);
231 uvwasi_errno_t uvwasi_path_remove_directory(uvwasi_t* uvwasi,
232                                             uvwasi_fd_t fd,
233                                             const char* path,
234                                             uvwasi_size_t path_len);
235 uvwasi_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);
242 uvwasi_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);
248 uvwasi_errno_t uvwasi_path_unlink_file(uvwasi_t* uvwasi,
249                                        uvwasi_fd_t fd,
250                                        const char* path,
251                                        uvwasi_size_t path_len);
252 uvwasi_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);
257 uvwasi_errno_t uvwasi_proc_exit(uvwasi_t* uvwasi, uvwasi_exitcode_t rval);
258 uvwasi_errno_t uvwasi_proc_raise(uvwasi_t* uvwasi, uvwasi_signal_t sig);
259 uvwasi_errno_t uvwasi_random_get(uvwasi_t* uvwasi,
260                                  void* buf,
261                                  uvwasi_size_t buf_len);
262 uvwasi_errno_t uvwasi_sched_yield(uvwasi_t* uvwasi);
263 uvwasi_errno_t uvwasi_sock_accept(uvwasi_t* uvwasi,
264                                   uvwasi_fd_t sock,
265                                   uvwasi_fdflags_t flags,
266                                   uvwasi_fd_t* fd);
267 uvwasi_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);
274 uvwasi_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);
280 uvwasi_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