File tree Expand file tree Collapse file tree 1 file changed +36
-0
lines changed Expand file tree Collapse file tree 1 file changed +36
-0
lines changed Original file line number Diff line number Diff line change @@ -206,6 +206,42 @@ char ** _swift_stdlib_getUnsafeArgvArgc(int *outArgLen) {
206
206
207
207
return outBuf;
208
208
}
209
+ #elif defined(__wasi__)
210
+ #include < wasi/api.h>
211
+ #include < wasi/libc.h>
212
+ #include < stdlib.h>
213
+
214
+ SWIFT_RUNTIME_STDLIB_API
215
+ char ** _swift_stdlib_getUnsafeArgvArgc (int *outArgLen) {
216
+ assert (outArgLen != nullptr );
217
+
218
+ if (_swift_stdlib_ProcessOverrideUnsafeArgv) {
219
+ *outArgLen = _swift_stdlib_ProcessOverrideUnsafeArgc;
220
+ return _swift_stdlib_ProcessOverrideUnsafeArgv;
221
+ }
222
+
223
+ __wasi_errno_t err;
224
+
225
+ size_t argv_buf_size;
226
+ size_t argc;
227
+ err = __wasi_args_sizes_get (&argc, &argv_buf_size);
228
+ if (err != __WASI_ERRNO_SUCCESS) return nullptr ;
229
+
230
+ size_t num_ptrs = argc + 1 ;
231
+ char *argv_buf = (char *)malloc (argv_buf_size);
232
+ char **argv = (char **)calloc (num_ptrs, sizeof (char *));
233
+
234
+ err = __wasi_args_get ((uint8_t **)argv, (uint8_t *)argv_buf);
235
+ if (err != __WASI_ERRNO_SUCCESS) {
236
+ free (argv_buf);
237
+ free (argv);
238
+ return nullptr ;
239
+ }
240
+
241
+ *outArgLen = static_cast <int >(argc);
242
+
243
+ return argv;
244
+ }
209
245
#else // Add your favorite OS's command line arg grabber here.
210
246
SWIFT_RUNTIME_STDLIB_API
211
247
char ** _swift_stdlib_getUnsafeArgvArgc (int *outArgLen) {
You can’t perform that action at this time.
0 commit comments