dav/sync.c

changeset 687
9922a349a61a
parent 686
ab159748055c
child 692
56b66fe2b4f5
--- a/dav/sync.c	Sun Nov 24 12:40:28 2019 +0100
+++ b/dav/sync.c	Mon Dec 02 13:29:36 2019 +0100
@@ -112,7 +112,47 @@
     }
 }
 
+int dav_sync_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_sync_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_sync_main(argc, argv);
+}
+#endif
+
+int dav_sync_main(int argc, char **argv) {
     if(argc < 2) {
         fprintf(stderr, "Missing command\n");
         print_usage(argv[0]);
@@ -142,10 +182,12 @@
     
     // ignore sigpipe to make sure the program doesn't exit
     // if stdout will be closed (for example by using dav-sync ... | head)
+#ifndef _WIN32
     struct sigaction act;
     memset(&act, 0, sizeof(struct sigaction));
     act.sa_handler = SIG_IGN;
     sigaction(SIGPIPE, &act, NULL);
+#endif
     
     // prepare signal handler thread
     pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;

mercurial