@@ -121,23 +121,27 @@ char **_swift_stdlib_getUnsafeArgvArgc(int *outArgLen) {
121
121
WideCharToMultiByte (CP_UTF8, WC_ERR_INVALID_CHARS, szArgList[i], -1 ,
122
122
nullptr , 0 , nullptr , nullptr );
123
123
if (szBufferSize == 0 ) {
124
- for (char *arg : argv)
125
- free (arg);
124
+ swift::fatalError (0 ,
125
+ " Fatal error: Could not retrieve commandline "
126
+ " arguments: %u\n " ,
127
+ GetLastError ());
126
128
return nullptr ;
127
129
}
128
130
129
131
char *buffer = static_cast <char *>(
130
132
calloc (static_cast <size_t >(szBufferSize), sizeof (char )));
131
133
if (buffer == nullptr ) {
132
- for (char *arg : argv)
133
- free (arg);
134
+ swift::fatalError (0 ,
135
+ " Fatal error: Could not allocate space for commandline"
136
+ " arguments" );
134
137
return nullptr ;
135
138
}
136
139
137
140
if (!WideCharToMultiByte (CP_UTF8, WC_ERR_INVALID_CHARS, szArgList[i], -1 ,
138
141
buffer, szBufferSize, nullptr , nullptr )) {
139
- for (char *arg : argv)
140
- free (arg);
142
+ swift::fatalError (0 ,
143
+ " Fatal error: Conversion to UTF-8 failed for "
144
+ " commandline arguments" );
141
145
return nullptr ;
142
146
}
143
147
@@ -227,27 +231,21 @@ char **_swift_stdlib_getUnsafeArgvArgc(int *outArgLen) {
227
231
size_t argc = 0 ;
228
232
err = __wasi_args_sizes_get (&argc, &argv_buf_size);
229
233
if (err != __WASI_ERRNO_SUCCESS) {
230
- argc = 0 ;
231
- }
232
-
233
- // __wasi_args_sizes_get requires the caller to allocate extra space for NULL
234
- // termination.
235
- size_t num_ptrs = argc + 1 ;
236
- char **argv = static_cast <char **>(calloc (num_ptrs, sizeof (char *)));
237
- if (err != __WASI_ERRNO_SUCCESS) {
238
- *outArgLen = 0 ;
239
- argv[0 ] = nullptr ;
240
- return argv;
234
+ swift::fatalError (0 ,
235
+ " Fatal error: Could not retrieve commandline "
236
+ " arguments: %d.\n " , static_cast <int >(err));
237
+ return nullptr ;
241
238
}
242
239
243
240
char *argv_buf = static_cast <char *>(malloc (argv_buf_size));
241
+ char **argv = static_cast <char **>(calloc (argc + 1 , sizeof (char *)));
242
+
244
243
err = __wasi_args_get ((uint8_t **)argv, (uint8_t *)argv_buf);
245
244
if (err != __WASI_ERRNO_SUCCESS) {
246
- free (argv_buf);
247
-
248
- *outArgLen = 0 ;
249
- argv[0 ] = nullptr ;
250
- return argv;
245
+ swift::fatalError (0 ,
246
+ " Fatal error: Could not retrieve commandline "
247
+ " arguments: %d.\n " , static_cast <int >(err));
248
+ return nullptr ;
251
249
}
252
250
253
251
*outArgLen = static_cast <int >(argc);
0 commit comments