From e1a946ffb79022d38351a0623f819a5419965c3e Mon Sep 17 00:00:00 2001
From: crueter <crueter@eden-emu.dev>
Date: Fri, 24 Oct 2025 23:41:09 -0700
Subject: [PATCH] [build] Fix MinGW missing GetAddrInfoExCancel definition

MinGW does not define GetAddrInfoExCancel in its wstcpi whatever header,
so to get around this we can just load it with GetProcAddress et al.

Signed-off-by: crueter <crueter@eden-emu.dev>
---
 httplib.h | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/httplib.h b/httplib.h
index e15ba44..90a76dc 100644
--- a/httplib.h
+++ b/httplib.h
@@ -203,11 +203,13 @@
 #error Sorry, Visual Studio versions prior to 2015 are not supported
 #endif
 
-#pragma comment(lib, "ws2_32.lib")
-
 using ssize_t = __int64;
 #endif // _MSC_VER
 
+#if defined(_MSC_VER) || defined(__MINGW32__)
+#pragma comment(lib, "ws2_32.lib")
+#endif
+
 #ifndef S_ISREG
 #define S_ISREG(m) (((m) & S_IFREG) == S_IFREG)
 #endif // S_ISREG
@@ -3557,7 +3559,15 @@ inline int getaddrinfo_with_timeout(const char *node, const char *service,
     auto wait_result =
         ::WaitForSingleObject(event, static_cast<DWORD>(timeout_sec * 1000));
     if (wait_result == WAIT_TIMEOUT) {
+#ifdef __MINGW32__
+      typedef INT (WSAAPI *PFN_GETADDRINFOEXCANCEL)(HANDLE *CancelHandle);
+      auto wsdll = LoadLibraryW((wchar_t*) "ws2_32.lib");
+      PFN_GETADDRINFOEXCANCEL GetAddrInfoExCancel = (PFN_GETADDRINFOEXCANCEL) GetProcAddress(wsdll, "GetAddrInfoExCancel");
+
+      if (cancel_handle) { GetAddrInfoExCancel(&cancel_handle); }
+#else
       if (cancel_handle) { ::GetAddrInfoExCancel(&cancel_handle); }
+#endif
       ::CloseHandle(event);
       return EAI_AGAIN;
     }
-- 
2.51.0

