From 33c08fc8aaf1ba5780a09d6ceaa2351abfd5e964 Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Tue, 13 Dec 2022 13:34:44 +0000 Subject: Deduplicate retrieving error messages on Windows. --- src/dynamic.cpp | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) (limited to 'src/dynamic.cpp') diff --git a/src/dynamic.cpp b/src/dynamic.cpp index 5f69820c9..ba75a4a31 100644 --- a/src/dynamic.cpp +++ b/src/dynamic.cpp @@ -117,19 +117,14 @@ void* DLLManager::GetSymbol(const char* name) const void DLLManager::RetrieveLastError() { -#if defined _WIN32 - char errmsg[500]; - DWORD dwErrorCode = GetLastError(); - if (FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwErrorCode, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)errmsg, _countof(errmsg), NULL) == 0) - sprintf_s(errmsg, _countof(errmsg), "Error code: %u", dwErrorCode); +#ifdef _WIN32 + err = GetErrorMessage(GetLastError()); SetLastError(ERROR_SUCCESS); - err = errmsg; #else const char* errmsg = dlerror(); err = errmsg ? errmsg : "Unknown error"; #endif - std::string::size_type p; - while ((p = err.find_last_of("\r\n")) != std::string::npos) - err.erase(p, 1); + for (size_t pos = 0; ((pos = err.find_first_of("\r\n", pos)) != std::string::npos); ) + err[pos] = ' '; } -- cgit v1.3.1-10-gc9f91