diff options
author | Marcel Raad <Marcel.Raad@teamviewer.com> | 2019-04-12 22:59:40 +0200 |
---|---|---|
committer | Marcel Raad <Marcel.Raad@teamviewer.com> | 2020-05-14 18:13:36 +0200 |
commit | 9e5669f3880674de262000e772ef21ec0cc874be (patch) | |
tree | 3f1f6e7353b5d807b164a7443c85840d47f5c8bf /src/tool_main.c | |
parent | a55c835e6b99f96e595ad11888a2714447998378 (diff) | |
download | curl-9e5669f3880674de262000e772ef21ec0cc874be.tar.gz |
tool: support UTF-16 command line on Windows
- use `wmain` instead of `main` when `_UNICODE` is defined [0]
- define `argv_item_t` as `wchar_t *` in this case
- use the curl_multibyte gear to convert the command-line arguments to
UTF-8
This makes it possible to pass parameters with characters outside of
the current locale on Windows, which is required for some tests, e.g.
the IDN tests. Out of the box, this currently only works with the
Visual Studio project files, which default to Unicode, and winbuild
with the `ENABLE_UNICODE` option.
[0] https://devblogs.microsoft.com/oldnewthing/?p=40643
Ref: https://github.com/curl/curl/issues/3747
Closes https://github.com/curl/curl/pull/3784
Diffstat (limited to 'src/tool_main.c')
-rw-r--r-- | src/tool_main.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/tool_main.c b/src/tool_main.c index 25042895f..ccf098e94 100644 --- a/src/tool_main.c +++ b/src/tool_main.c @@ -273,22 +273,28 @@ static void restore_terminal(void) /* ** curl tool main function. */ +#ifdef _UNICODE +int wmain(int argc, wchar_t *argv[]) +#else int main(int argc, char *argv[]) +#endif { CURLcode result = CURLE_OK; struct GlobalConfig global; memset(&global, 0, sizeof(global)); #ifdef WIN32 +#ifdef _tcscmp /* Undocumented diagnostic option to list the full paths of all loaded modules. This is purposely pre-init. */ - if(argc == 2 && !strcmp(argv[1], "--dump-module-paths")) { + if(argc == 2 && !_tcscmp(argv[1], _T("--dump-module-paths"))) { struct curl_slist *item, *head = GetLoadedModulePaths(); for(item = head; item; item = item->next) printf("%s\n", item->data); curl_slist_free_all(head); return head ? 0 : 1; } +#endif /* _tcscmp */ /* win32_init must be called before other init routines. */ result = win32_init(); if(result) { |