]> granicus.if.org Git - curl/commitdiff
curl_threads: fix classic MinGW compile break
authorMarcel Raad <Marcel.Raad@teamviewer.com>
Wed, 26 Sep 2018 12:43:58 +0000 (14:43 +0200)
committerMarcel Raad <Marcel.Raad@teamviewer.com>
Thu, 27 Sep 2018 07:13:20 +0000 (09:13 +0200)
Classic MinGW still has _beginthreadex's return type as unsigned long
instead of uintptr_t [0]. uintptr_t is not even defined because of [1].

[0] https://sourceforge.net/p/mingw/mingw-org-wsl/ci/wsl-5.1-release/tree/mingwrt/include/process.h#l167
[1] https://sourceforge.net/p/mingw/mingw-org-wsl/ci/wsl-5.1-release/tree/mingwrt/include/process.h#l90

Bug: https://github.com/curl/curl/issues/2924#issuecomment-424334807
Closes https://github.com/curl/curl/pull/3051

lib/curl_threads.c

index b8f0cd35d527c2e554e8b886692c80eed7ec3797..8e5937aa0bc033acd411dbf78bd1ff60e2c831ac 100644 (file)
@@ -104,13 +104,21 @@ int Curl_thread_join(curl_thread_t *hnd)
 curl_thread_t Curl_thread_create(unsigned int (CURL_STDCALL *func) (void *),
                                  void *arg)
 {
+#ifdef _WIN32_WCE
+  typedef HANDLE curl_win_thread_handle_t;
+#elif defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR)
+  typedef unsigned long curl_win_thread_handle_t;
+#else
+  typedef uintptr_t curl_win_thread_handle_t;
+#endif
   curl_thread_t t;
+  curl_win_thread_handle_t thread_handle;
 #ifdef _WIN32_WCE
-  t = CreateThread(NULL, 0, func, arg, 0, NULL);
+  thread_handle = CreateThread(NULL, 0, func, arg, 0, NULL);
 #else
-  uintptr_t thread_handle = _beginthreadex(NULL, 0, func, arg, 0, NULL);
-  t = (curl_thread_t)thread_handle;
+  thread_handle = _beginthreadex(NULL, 0, func, arg, 0, NULL);
 #endif
+  t = (curl_thread_t)thread_handle;
   if((t == 0) || (t == LongToHandle(-1L))) {
 #ifdef _WIN32_WCE
     DWORD gle = GetLastError();