--- a/dav/main.c Sun Nov 24 12:40:28 2019 +0100 +++ b/dav/main.c Mon Dec 02 13:29:36 2019 +0100 @@ -73,7 +73,48 @@ } +int dav_main(int argc, char **argv); + +#ifdef _WIN32 +static char* wchar2utf8(const wchar_t *wstr, size_t wlen) { + size_t maxlen = wlen * 4; + char *ret = malloc(maxlen + 1); + int ret_len = WideCharToMultiByte( + CP_UTF8, + 0, + wstr, + wlen, + ret, + maxlen, + NULL, + NULL); + ret[ret_len] = 0; + return ret; +} + +int wmain(int argc, wchar_t **argv) { + char **argv_utf8 = calloc(argc, sizeof(char*)); + for(int i=0;i<argc;i++) { + argv_utf8[i] = wchar2utf8(argv[i], wcslen(argv[i])); + } + + int ret = dav_main(argc, argv_utf8); + + for(int i=0;i<argc;i++) { + free(argv_utf8[i]); + } + free(argv_utf8); + + return ret; +} +#else int main(int argc, char **argv) { + return dav_main(argc, argv); +} +#endif + + +int dav_main(int argc, char **argv) { if(argc < 2) { fprintf(stderr, "Missing command\n"); print_usage(argv[0]);