Fix warnings when compiling for Windows.
[tinc] / src / upnp.c
index 5e41d1b..553630e 100644 (file)
@@ -1,6 +1,6 @@
 /*
     upnp.c -- UPnP-IGD client
-    Copyright (C) 2015 Guus Sliepen <guus@tinc-vpn.org>,
+    Copyright (C) 2015-2018 Guus Sliepen <guus@tinc-vpn.org>,
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
@@ -19,7 +19,9 @@
 
 #include "upnp.h"
 
+#ifndef HAVE_MINGW
 #include <pthread.h>
+#endif
 
 #include "miniupnpc/miniupnpc.h"
 #include "miniupnpc/upnpcommands.h"
@@ -159,7 +161,9 @@ static void *upnp_thread(void *data) {
                time_t now = time(NULL);
 
                if(now < refresh_time) {
-                       sleep(refresh_time - now);
+                       nanosleep(&(struct timespec) {
+                               refresh_time - now, 0
+                       }, NULL);
                }
        }
 
@@ -176,10 +180,20 @@ void upnp_init(bool tcp, bool udp) {
        get_config_int(lookup_config(config_tree, "UPnPDiscoverWait"), &upnp_discover_wait);
        get_config_int(lookup_config(config_tree, "UPnPRefreshPeriod"), &upnp_refresh_period);
 
+#ifdef HAVE_MINGW
+       HANDLE handle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)upnp_thread, NULL, 0, NULL);
+
+       if(!handle) {
+               logger(DEBUG_ALWAYS, LOG_ERR, "Unable to start UPnP-IGD client thread");
+       }
+
+#else
        pthread_t thread;
        int error = pthread_create(&thread, NULL, upnp_thread, NULL);
 
        if(error) {
                logger(DEBUG_ALWAYS, LOG_ERR, "Unable to start UPnP-IGD client thread: [%d] %s", error, strerror(error));
        }
+
+#endif
 }