* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
#ifdef __VMS
#define argv_item_t __char_ptr32
+#elif defined(_UNICODE)
+#define argv_item_t wchar_t *
#else
#define argv_item_t char *
#endif
struct OperationConfig *config = global->first;
for(i = 1, stillflags = TRUE; i < argc && !result; i++) {
- orig_opt = argv[i];
+ orig_opt = curlx_convert_tchar_to_UTF8(argv[i]);
- if(stillflags && ('-' == argv[i][0])) {
+ if(stillflags && ('-' == orig_opt[0])) {
bool passarg;
- char *flag = argv[i];
- if(!strcmp("--", argv[i]))
+ if(!strcmp("--", orig_opt))
/* This indicates the end of the flags and thus enables the
following (URL) argument to start with -. */
stillflags = FALSE;
else {
- char *nextarg = (i < (argc - 1)) ? argv[i + 1] : NULL;
+ char *nextarg = (i < (argc - 1))
+ ? curlx_convert_tchar_to_UTF8(argv[i + 1])
+ : NULL;
- result = getparameter(flag, nextarg, &passarg, global, config);
+ result = getparameter(orig_opt, nextarg, &passarg, global, config);
+ curlx_unicodefree(nextarg);
config = global->last;
if(result == PARAM_NEXT_OPERATION) {
/* Reset result as PARAM_NEXT_OPERATION is only used here and not
bool used;
/* Just add the URL please */
- result = getparameter((char *)"--url", argv[i], &used, global,
+ result = getparameter("--url", orig_opt, &used, global,
config);
}
}
helpf(global->errors, "%s\n", reason);
}
+ curlx_unicodefree(orig_opt);
return result;
}
/*
** 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) {
CURLcode operate(struct GlobalConfig *global, int argc, argv_item_t argv[])
{
CURLcode result = CURLE_OK;
+ char *first_arg = curlx_convert_tchar_to_UTF8(argv[1]);
/* Setup proper locale from environment */
#ifdef HAVE_SETLOCALE
/* Parse .curlrc if necessary */
if((argc == 1) ||
- (!curl_strequal(argv[1], "-q") &&
- !curl_strequal(argv[1], "--disable"))) {
+ (!curl_strequal(first_arg, "-q") &&
+ !curl_strequal(first_arg, "--disable"))) {
parseconfig(NULL, global); /* ignore possible failure */
/* If we had no arguments then make sure a url was specified in .curlrc */
}
}
+ curlx_unicodefree(first_arg);
+
if(!result) {
/* Parse the command line arguments */
ParameterError res = parse_args(global, argc, argv);