From b2cc2ef0d78a6bb32329c3d28ec48643d8c3393b Mon Sep 17 00:00:00 2001 From: SChernykh Date: Fri, 17 Sep 2021 12:05:37 +0200 Subject: [PATCH] Fixed Windows 7 compatibility Fixes #2585 --- src/base/io/Env.cpp | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/base/io/Env.cpp b/src/base/io/Env.cpp index 2a0d4ad7c..e31cb43c0 100644 --- a/src/base/io/Env.cpp +++ b/src/base/io/Env.cpp @@ -142,10 +142,30 @@ xmrig::String xmrig::Env::get(const String &name, const std::map xmrig::String xmrig::Env::hostname() { +# ifdef _WIN32 + const HMODULE hLib = LoadLibraryA("Ws2_32.dll"); + if (hLib) { + typedef int (WSAAPI* GetHostNameW_proc)(PWSTR, int); + GetHostNameW_proc GetHostNameW_ptr = reinterpret_cast(GetProcAddress(hLib, "GetHostNameW")); + if (GetHostNameW_ptr) { + WCHAR buf[UV_MAXHOSTNAMESIZE]; + if (GetHostNameW_ptr(buf, UV_MAXHOSTNAMESIZE) != 0) { + return {}; + } + char utf8_str[UV_MAXHOSTNAMESIZE * 4 + 1]; + const int len = WideCharToMultiByte(CP_UTF8, 0, buf, -1, utf8_str, sizeof(utf8_str), nullptr, nullptr); + if (len <= 0) { + return {}; + } + return utf8_str; + } + } +# endif + char buf[UV_MAXHOSTNAMESIZE]{}; size_t size = sizeof(buf); -# if UV_VERSION_HEX >= 0x010c00 +# if (UV_VERSION_HEX >= 0x010c00) && !defined(_WIN32) if (uv_os_gethostname(buf, &size) == 0) { return static_cast(buf); }