From 3d21401569ba1115913bfa6d71d12df1924ffa63 Mon Sep 17 00:00:00 2001 From: SirLynix Date: Thu, 28 Dec 2023 13:25:33 +0100 Subject: [PATCH] Fix compilation on Windows < Vista --- src/Nazara/Core/Win32/ThreadImpl.cpp | 6 +++++ src/Nazara/Core/Win32/TimeImpl.cpp | 6 ++--- src/Nazara/Network/Win32/IpAddressImpl.cpp | 10 ++++---- src/Nazara/Network/Win32/IpAddressImpl.hpp | 4 ++-- src/Nazara/Network/Win32/SocketImpl.cpp | 28 ++++++++++++++++++++++ 5 files changed, 44 insertions(+), 10 deletions(-) diff --git a/src/Nazara/Core/Win32/ThreadImpl.cpp b/src/Nazara/Core/Win32/ThreadImpl.cpp index da2ea9fd4..5a0f8686e 100644 --- a/src/Nazara/Core/Win32/ThreadImpl.cpp +++ b/src/Nazara/Core/Win32/ThreadImpl.cpp @@ -118,8 +118,14 @@ namespace Nz::PlatformImpl static SetThreadDescriptionFunc SetThreadDescription = reinterpret_cast(::GetProcAddress(::GetModuleHandleW(L"Kernel32.dll"), "SetThreadDescription")); if (SetThreadDescription) SetThreadDescription(threadHandle, ToWideString(threadName).data()); +#if NAZARA_UTILS_WINDOWS_NT6 else RaiseThreadNameException(::GetThreadId(threadHandle), threadName); +#else + NazaraUnused(threadHandle); + NazaraUnused(threadName); +#endif + #else ::pthread_setname_np(threadHandle, threadName); #endif diff --git a/src/Nazara/Core/Win32/TimeImpl.cpp b/src/Nazara/Core/Win32/TimeImpl.cpp index fa6ea6469..d5d12632b 100644 --- a/src/Nazara/Core/Win32/TimeImpl.cpp +++ b/src/Nazara/Core/Win32/TimeImpl.cpp @@ -51,11 +51,11 @@ namespace Nz Time GetElapsedMillisecondsImpl() { - #ifdef NAZARA_UTILS_WINDOWS_NT6 +#if NAZARA_UTILS_WINDOWS_NT6 return Time::Milliseconds(GetTickCount64()); - #else +#else return Time::Milliseconds(GetTickCount()); - #endif +#endif } } diff --git a/src/Nazara/Network/Win32/IpAddressImpl.cpp b/src/Nazara/Network/Win32/IpAddressImpl.cpp index 3eb95c708..60c1ef766 100644 --- a/src/Nazara/Network/Win32/IpAddressImpl.cpp +++ b/src/Nazara/Network/Win32/IpAddressImpl.cpp @@ -24,7 +24,7 @@ namespace Nz { namespace Detail { - #if NAZARA_UTILS_WINDOWS_NT6 +#if NAZARA_UTILS_WINDOWS_NT6 using addrinfoImpl = addrinfoW; int GetAddressInfo(const std::string& hostname, const std::string& service, const addrinfoImpl* hints, addrinfoImpl** results) @@ -59,7 +59,7 @@ namespace Nz { return FromWideString(str); } - #else +#else using addrinfoImpl = addrinfo; int GetAddressInfo(const std::string& hostname, const std::string& service, const addrinfoImpl* hints, addrinfoImpl** results) @@ -94,7 +94,7 @@ namespace Nz { return str; } - #endif +#endif } IpAddress IpAddressImpl::FromAddrinfo(const addrinfo* info) @@ -119,7 +119,7 @@ namespace Nz return IpAddress::Invalid; } - #if NAZARA_UTILS_WINDOWS_NT6 +#if NAZARA_UTILS_WINDOWS_NT6 IpAddress IpAddressImpl::FromAddrinfo(const addrinfoW* info) { switch (info->ai_family) @@ -141,7 +141,7 @@ namespace Nz return IpAddress::Invalid; } - #endif +#endif IpAddress IpAddressImpl::FromSockAddr(const sockaddr* address) { diff --git a/src/Nazara/Network/Win32/IpAddressImpl.hpp b/src/Nazara/Network/Win32/IpAddressImpl.hpp index 9f5bcbf1d..52646a1f5 100644 --- a/src/Nazara/Network/Win32/IpAddressImpl.hpp +++ b/src/Nazara/Network/Win32/IpAddressImpl.hpp @@ -23,9 +23,9 @@ namespace Nz ~IpAddressImpl() = delete; static IpAddress FromAddrinfo(const addrinfo* info); - #if NAZARA_UTILS_WINDOWS_NT6 +#if NAZARA_UTILS_WINDOWS_NT6 static IpAddress FromAddrinfo(const addrinfoW* info); - #endif + #endif static IpAddress FromSockAddr(const sockaddr* address); static IpAddress FromSockAddr(const sockaddr_in* addressv4); static IpAddress FromSockAddr(const sockaddr_in6* addressv6); diff --git a/src/Nazara/Network/Win32/SocketImpl.cpp b/src/Nazara/Network/Win32/SocketImpl.cpp index 8a61ea0f6..638a29a93 100644 --- a/src/Nazara/Network/Win32/SocketImpl.cpp +++ b/src/Nazara/Network/Win32/SocketImpl.cpp @@ -449,12 +449,28 @@ namespace Nz SocketState SocketImpl::PollConnection(SocketHandle handle, const IpAddress& /*address*/, UInt64 msTimeout, SocketError* error) { // Wait until socket is available for writing or an error occurs (ie when connection succeeds or fails) +#if NAZARA_UTILS_WINDOWS_NT6 WSAPOLLFD descriptor; descriptor.events = POLLWRNORM; descriptor.fd = handle; descriptor.revents = 0; int ret = WSAPoll(&descriptor, 1, (msTimeout != std::numeric_limits::max()) ? INT(msTimeout) : INT(-1)); +#else + fd_set writeSet; + FD_ZERO(&writeSet); + FD_SET(handle, &writeSet); + + fd_set errSet; + FD_ZERO(&errSet); + FD_SET(handle, &errSet); + + timeval tv; + tv.tv_sec = static_cast(msTimeout / 1000ULL); + tv.tv_usec = static_cast((msTimeout % 1000ULL) * 1000ULL); + + int ret = ::select(0xDEADBEEF, nullptr, &writeSet, &errSet, (msTimeout >= 0) ? &tv : nullptr); //< The first argument is ignored on Windows +#endif if (ret == SOCKET_ERROR) { if (error) @@ -464,18 +480,30 @@ namespace Nz } else if (ret > 0) { +#if NAZARA_UTILS_WINDOWS_NT6 if (descriptor.revents & (POLLERR | POLLHUP)) +#else + if (FD_ISSET(handle, &errSet)) +#endif { if (error) *error = GetLastError(handle); return SocketState::NotConnected; } +#if NAZARA_UTILS_WINDOWS_NT6 else if (descriptor.revents & POLLWRNORM) +#else + else if (FD_ISSET(handle, &writeSet)) +#endif return SocketState::Connected; else { +#if NAZARA_UTILS_WINDOWS_NT6 NazaraWarningFmt("Socket {0} was returned by poll without POLLOUT nor error events (events: {1:#x})", handle, descriptor.revents); +#else + NazaraWarningFmt("Socket {0} was returned by select but is not part of the write nor exception set", handle); +#endif return SocketState::NotConnected; } }