mirror of
https://github.com/fmtlib/fmt.git
synced 2025-07-31 03:07:36 +02:00
Fix windows build
This commit is contained in:
@ -341,16 +341,16 @@ FMT_FUNC int internal::UTF16ToUTF8::convert(WStringRef s) {
|
|||||||
FMT_FUNC void WindowsError::init(
|
FMT_FUNC void WindowsError::init(
|
||||||
int err_code, CStringRef format_str, args args) {
|
int err_code, CStringRef format_str, args args) {
|
||||||
error_code_ = err_code;
|
error_code_ = err_code;
|
||||||
MemoryWriter w;
|
internal::MemoryBuffer<char> buffer;
|
||||||
internal::format_windows_error(w, err_code, vformat(format_str, args));
|
internal::format_windows_error(buffer, err_code, vformat(format_str, args));
|
||||||
std::runtime_error &base = *this;
|
std::runtime_error &base = *this;
|
||||||
base = std::runtime_error(w.str());
|
base = std::runtime_error(to_string(buffer));
|
||||||
}
|
}
|
||||||
|
|
||||||
FMT_FUNC void internal::format_windows_error(
|
FMT_FUNC void internal::format_windows_error(
|
||||||
writer &out, int error_code, StringRef message) FMT_NOEXCEPT {
|
buffer &out, int error_code, StringRef message) FMT_NOEXCEPT {
|
||||||
FMT_TRY {
|
FMT_TRY {
|
||||||
MemoryBuffer<wchar_t, INLINE_BUFFER_SIZE> buffer;
|
MemoryBuffer<wchar_t> buffer;
|
||||||
buffer.resize(INLINE_BUFFER_SIZE);
|
buffer.resize(INLINE_BUFFER_SIZE);
|
||||||
for (;;) {
|
for (;;) {
|
||||||
wchar_t *system_message = &buffer[0];
|
wchar_t *system_message = &buffer[0];
|
||||||
@ -361,9 +361,10 @@ FMT_FUNC void internal::format_windows_error(
|
|||||||
if (result != 0) {
|
if (result != 0) {
|
||||||
UTF16ToUTF8 utf8_message;
|
UTF16ToUTF8 utf8_message;
|
||||||
if (utf8_message.convert(system_message) == ERROR_SUCCESS) {
|
if (utf8_message.convert(system_message) == ERROR_SUCCESS) {
|
||||||
out.write(message);
|
basic_writer<char> w(out);
|
||||||
out.write(": ");
|
w.write(message);
|
||||||
out.write(utf8_message);
|
w.write(": ");
|
||||||
|
w.write(utf8_message);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -279,11 +279,11 @@ TEST(FileTest, Size) {
|
|||||||
EXPECT_GE(f.size(), 0);
|
EXPECT_GE(f.size(), 0);
|
||||||
EXPECT_EQ(content.size(), static_cast<fmt::ULongLong>(f.size()));
|
EXPECT_EQ(content.size(), static_cast<fmt::ULongLong>(f.size()));
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
fmt::MemoryWriter message;
|
fmt::internal::MemoryBuffer<char> message;
|
||||||
fmt::internal::format_windows_error(
|
fmt::internal::format_windows_error(
|
||||||
message, ERROR_ACCESS_DENIED, "cannot get file size");
|
message, ERROR_ACCESS_DENIED, "cannot get file size");
|
||||||
fstat_sim = ERROR;
|
fstat_sim = ERROR;
|
||||||
EXPECT_THROW_MSG(f.size(), fmt::WindowsError, message.str());
|
EXPECT_THROW_MSG(f.size(), fmt::WindowsError, fmt::to_string(message));
|
||||||
fstat_sim = NONE;
|
fstat_sim = NONE;
|
||||||
#else
|
#else
|
||||||
f.close();
|
f.close();
|
||||||
|
@ -667,7 +667,7 @@ template <typename Converter, typename Char>
|
|||||||
void check_utf_conversion_error(
|
void check_utf_conversion_error(
|
||||||
const char *message,
|
const char *message,
|
||||||
fmt::BasicStringRef<Char> str = fmt::BasicStringRef<Char>(0, 0)) {
|
fmt::BasicStringRef<Char> str = fmt::BasicStringRef<Char>(0, 0)) {
|
||||||
fmt::MemoryWriter out;
|
fmt::internal::MemoryBuffer<char> out;
|
||||||
fmt::internal::format_windows_error(out, ERROR_INVALID_PARAMETER, message);
|
fmt::internal::format_windows_error(out, ERROR_INVALID_PARAMETER, message);
|
||||||
fmt::SystemError error(0, "");
|
fmt::SystemError error(0, "");
|
||||||
try {
|
try {
|
||||||
@ -676,7 +676,7 @@ void check_utf_conversion_error(
|
|||||||
error = e;
|
error = e;
|
||||||
}
|
}
|
||||||
EXPECT_EQ(ERROR_INVALID_PARAMETER, error.error_code());
|
EXPECT_EQ(ERROR_INVALID_PARAMETER, error.error_code());
|
||||||
EXPECT_EQ(out.str(), error.what());
|
EXPECT_EQ(fmt::to_string(out), error.what());
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(UtilTest, UTF16ToUTF8Error) {
|
TEST(UtilTest, UTF16ToUTF8Error) {
|
||||||
@ -752,16 +752,17 @@ TEST(UtilTest, FormatWindowsError) {
|
|||||||
reinterpret_cast<LPWSTR>(&message), 0, 0);
|
reinterpret_cast<LPWSTR>(&message), 0, 0);
|
||||||
fmt::internal::UTF16ToUTF8 utf8_message(message);
|
fmt::internal::UTF16ToUTF8 utf8_message(message);
|
||||||
LocalFree(message);
|
LocalFree(message);
|
||||||
fmt::MemoryWriter actual_message;
|
fmt::internal::MemoryBuffer<char> actual_message;
|
||||||
fmt::internal::format_windows_error(
|
fmt::internal::format_windows_error(
|
||||||
actual_message, ERROR_FILE_EXISTS, "test");
|
actual_message, ERROR_FILE_EXISTS, "test");
|
||||||
EXPECT_EQ(fmt::format("test: {}", utf8_message.str()),
|
EXPECT_EQ(fmt::format("test: {}", utf8_message.str()),
|
||||||
actual_message.str());
|
fmt::to_string(actual_message));
|
||||||
actual_message.clear();
|
actual_message.clear();
|
||||||
fmt::internal::format_windows_error(
|
fmt::internal::format_windows_error(
|
||||||
actual_message, ERROR_FILE_EXISTS,
|
actual_message, ERROR_FILE_EXISTS,
|
||||||
fmt::StringRef(0, std::numeric_limits<size_t>::max()));
|
fmt::StringRef(0, std::numeric_limits<size_t>::max()));
|
||||||
EXPECT_EQ(fmt::format("error {}", ERROR_FILE_EXISTS), actual_message.str());
|
EXPECT_EQ(fmt::format("error {}", ERROR_FILE_EXISTS),
|
||||||
|
fmt::to_string(actual_message));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(UtilTest, FormatLongWindowsError) {
|
TEST(UtilTest, FormatLongWindowsError) {
|
||||||
@ -778,11 +779,11 @@ TEST(UtilTest, FormatLongWindowsError) {
|
|||||||
}
|
}
|
||||||
fmt::internal::UTF16ToUTF8 utf8_message(message);
|
fmt::internal::UTF16ToUTF8 utf8_message(message);
|
||||||
LocalFree(message);
|
LocalFree(message);
|
||||||
fmt::MemoryWriter actual_message;
|
fmt::internal::MemoryBuffer<char> actual_message;
|
||||||
fmt::internal::format_windows_error(
|
fmt::internal::format_windows_error(
|
||||||
actual_message, provisioning_not_allowed, "test");
|
actual_message, provisioning_not_allowed, "test");
|
||||||
EXPECT_EQ(fmt::format("test: {}", utf8_message.str()),
|
EXPECT_EQ(fmt::format("test: {}", utf8_message.str()),
|
||||||
actual_message.str());
|
fmt::to_string(actual_message));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(UtilTest, WindowsError) {
|
TEST(UtilTest, WindowsError) {
|
||||||
@ -791,11 +792,12 @@ TEST(UtilTest, WindowsError) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST(UtilTest, ReportWindowsError) {
|
TEST(UtilTest, ReportWindowsError) {
|
||||||
fmt::MemoryWriter out;
|
fmt::internal::MemoryBuffer<char> out;
|
||||||
fmt::internal::format_windows_error(out, ERROR_FILE_EXISTS, "test error");
|
fmt::internal::format_windows_error(out, ERROR_FILE_EXISTS, "test error");
|
||||||
out.write('\n');
|
out.push_back('\n');
|
||||||
EXPECT_WRITE(stderr,
|
EXPECT_WRITE(stderr,
|
||||||
fmt::report_windows_error(ERROR_FILE_EXISTS, "test error"), out.str());
|
fmt::report_windows_error(ERROR_FILE_EXISTS, "test error"),
|
||||||
|
fmt::to_string(out));
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // _WIN32
|
#endif // _WIN32
|
||||||
|
Reference in New Issue
Block a user