mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-06-01 08:44:02 +02:00
Merge bitcoin/bitcoin#32380: Modernize use of UTF-8 in Windows code
53e4951a5bSwitch to ANSI Windows API in `fsbridge::fopen()` function (Hennadii Stepanov)dbe770d921Switch to ANSI Windows API in `Win32ErrorString()` function (Hennadii Stepanov)06d0be4e22Remove no longer necessary `WinCmdLineArgs` class (Hennadii Stepanov)f366408492cmake: Set process code page to UTF-8 on Windows (Hennadii Stepanov)dccbb17806Set minimum supported Windows version to 1903 (May 2019 Update) (Hennadii Stepanov) Pull request description: The main goal is to remove [deprecated](https://github.com/bitcoin/bitcoin/issues/32361) code (removed in C++26). This PR employs Microsoft's modern [approach](https://learn.microsoft.com/en-us/windows/apps/design/globalizing/use-utf8-code-page) to handling UTF-8: > Until recently, Windows has emphasized "Unicode" -W variants over -A APIs. However, recent releases have used the ANSI code page and -A APIs as a means to introduce UTF-8 support to apps. If the ANSI code page is configured for UTF-8, then -A APIs typically operate in UTF-8. This model has the benefit of supporting existing code built with -A APIs without any code changes. TODO: - [x] Handle application manifests properly when building with MSVC. - [x] Bump the minimum supported Windows version to 1903 (May 2019 Update). - [x] Remove all remaining use cases of the deprecated `std:wstring_convert`. - The instance in `subprocess.h` will be addressed in a follow-up PR, as additional tests are likely needed. - The usage in `common/system.cpp` is handled in https://github.com/bitcoin/bitcoin/pull/32566. Resolves partially https://github.com/bitcoin/bitcoin/issues/32361. ACKs for top commit: laanwj: re-ACK53e4951a5bhodlinator: re-ACK53e4951a5bdavidgumberg: untested crACK53e4951a5bTree-SHA512: 0dbe9badca8b979ac2b4814fea6e4a7e53c423a1c96cb76ce894253137d3640a87631a5b22b9645e8f0c2a36a107122eb19ed8e92978c17384ffa8b9ab9993b5
This commit is contained in:
@@ -12,7 +12,6 @@
|
||||
#include <sys/utsname.h>
|
||||
#include <unistd.h>
|
||||
#else
|
||||
#include <codecvt>
|
||||
#include <limits>
|
||||
#include <windows.h>
|
||||
#endif
|
||||
@@ -28,8 +27,7 @@ FILE *fopen(const fs::path& p, const char *mode)
|
||||
#ifndef WIN32
|
||||
return ::fopen(p.c_str(), mode);
|
||||
#else
|
||||
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>,wchar_t> utf8_cvt;
|
||||
return ::_wfopen(p.wstring().c_str(), utf8_cvt.from_bytes(mode).c_str());
|
||||
return ::fopen(p.utf8string().c_str(), mode);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -12,8 +12,6 @@
|
||||
|
||||
#if defined(WIN32)
|
||||
#include <windows.h>
|
||||
#include <locale>
|
||||
#include <codecvt>
|
||||
#endif
|
||||
|
||||
std::string SysErrorString(int err)
|
||||
@@ -41,16 +39,13 @@ std::string SysErrorString(int err)
|
||||
#if defined(WIN32)
|
||||
std::string Win32ErrorString(int err)
|
||||
{
|
||||
wchar_t buf[256];
|
||||
char buf[256];
|
||||
buf[0] = 0;
|
||||
if(FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_MAX_WIDTH_MASK,
|
||||
if (FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_MAX_WIDTH_MASK,
|
||||
nullptr, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
||||
buf, ARRAYSIZE(buf), nullptr))
|
||||
{
|
||||
return strprintf("%s (%d)", std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>,wchar_t>().to_bytes(buf), err);
|
||||
}
|
||||
else
|
||||
{
|
||||
buf, ARRAYSIZE(buf), nullptr)) {
|
||||
return strprintf("%s (%d)", buf, err);
|
||||
} else {
|
||||
return strprintf("Unknown error (%d)", err);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user