• 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 "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