dav/main.c

changeset 687
9922a349a61a
parent 684
a4b4257c1a5f
child 703
2e3a24b9896a
--- 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]);

mercurial