xref: /third_party/node/deps/uvwasi/include/uvwasi.h (revision 1cb0ef41)
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