Fix windows build

This commit is contained in:
Victor Zverovich 2017-02-17 06:38:53 -08:00
parent 87b691d80c
commit e022c21ddc
3 changed files with 23 additions and 20 deletions

View File

@ -341,16 +341,16 @@ FMT_FUNC int internal::UTF16ToUTF8::convert(WStringRef s) {
FMT_FUNC void WindowsError::init(
int err_code, CStringRef format_str, args args) {
error_code_ = err_code;
MemoryWriter w;
internal::format_windows_error(w, err_code, vformat(format_str, args));
internal::MemoryBuffer<char> buffer;
internal::format_windows_error(buffer, err_code, vformat(format_str, args));
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(
writer &out, int error_code, StringRef message) FMT_NOEXCEPT {
buffer &out, int error_code, StringRef message) FMT_NOEXCEPT {
FMT_TRY {
MemoryBuffer<wchar_t, INLINE_BUFFER_SIZE> buffer;
MemoryBuffer<wchar_t> buffer;
buffer.resize(INLINE_BUFFER_SIZE);
for (;;) {
wchar_t *system_message = &buffer[0];
@ -361,9 +361,10 @@ FMT_FUNC void internal::format_windows_error(
if (result != 0) {
UTF16ToUTF8 utf8_message;
if (utf8_message.convert(system_message) == ERROR_SUCCESS) {
out.write(message);
out.write(": ");
out.write(utf8_message);
basic_writer<char> w(out);
w.write(message);
w.write(": ");
w.write(utf8_message);
return;
}
break;

View File

@ -279,11 +279,11 @@ TEST(FileTest, Size) {
EXPECT_GE(f.size(), 0);
EXPECT_EQ(content.size(), static_cast<fmt::ULongLong>(f.size()));
#ifdef _WIN32
fmt::MemoryWriter message;
fmt::internal::MemoryBuffer<char> message;
fmt::internal::format_windows_error(
message, ERROR_ACCESS_DENIED, "cannot get file size");
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;
#else
f.close();

View File

@ -667,7 +667,7 @@ template <typename Converter, typename Char>
void check_utf_conversion_error(
const char *message,
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::SystemError error(0, "");
try {
@ -676,7 +676,7 @@ void check_utf_conversion_error(
error = e;
}
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) {
@ -752,16 +752,17 @@ TEST(UtilTest, FormatWindowsError) {
reinterpret_cast<LPWSTR>(&message), 0, 0);
fmt::internal::UTF16ToUTF8 utf8_message(message);
LocalFree(message);
fmt::MemoryWriter actual_message;
fmt::internal::MemoryBuffer<char> actual_message;
fmt::internal::format_windows_error(
actual_message, ERROR_FILE_EXISTS, "test");
EXPECT_EQ(fmt::format("test: {}", utf8_message.str()),
actual_message.str());
fmt::to_string(actual_message));
actual_message.clear();
fmt::internal::format_windows_error(
actual_message, ERROR_FILE_EXISTS,
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) {
@ -778,11 +779,11 @@ TEST(UtilTest, FormatLongWindowsError) {
}
fmt::internal::UTF16ToUTF8 utf8_message(message);
LocalFree(message);
fmt::MemoryWriter actual_message;
fmt::internal::MemoryBuffer<char> actual_message;
fmt::internal::format_windows_error(
actual_message, provisioning_not_allowed, "test");
EXPECT_EQ(fmt::format("test: {}", utf8_message.str()),
actual_message.str());
fmt::to_string(actual_message));
}
TEST(UtilTest, WindowsError) {
@ -791,11 +792,12 @@ TEST(UtilTest, WindowsError) {
}
TEST(UtilTest, ReportWindowsError) {
fmt::MemoryWriter out;
fmt::internal::MemoryBuffer<char> out;
fmt::internal::format_windows_error(out, ERROR_FILE_EXISTS, "test error");
out.write('\n');
out.push_back('\n');
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