From f1558f01a790ffa866b8c38598f8b07e1cedf53e Mon Sep 17 00:00:00 2001 From: lx-s Date: Tue, 14 Nov 2023 20:27:05 +0100 Subject: [PATCH] Moved some mallocs to vectors and strings --- WinMute/Utility.cpp | 91 ++++++++++++++++++--------------------------- 1 file changed, 37 insertions(+), 54 deletions(-) diff --git a/WinMute/Utility.cpp b/WinMute/Utility.cpp index 191b6f9..73a29c9 100644 --- a/WinMute/Utility.cpp +++ b/WinMute/Utility.cpp @@ -41,70 +41,53 @@ void PrintWindowsError(const wchar_t *functionName, DWORD lastError) } LPVOID lpMsgBuf; - if (FormatMessage( + if (FormatMessageW( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, nullptr, lastError, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), - reinterpret_cast(&lpMsgBuf), 0, nullptr) != 0) { - // Display the error message and exit the process - const std::wstring errorMsg = std::vformat( - WMi18n::GetInstance().GetTextW(IDS_MAIN_ERROR_WINAPI_FAILURE_TEXT), - std::make_wformat_args( - functionName, - lastError, - reinterpret_cast(lpMsgBuf))); - TaskDialog( - nullptr, - nullptr, - PROGRAM_NAME, - errorMsg.c_str(), - nullptr, - TDCBF_OK_BUTTON, - TD_ERROR_ICON, - nullptr); - LocalFree(lpMsgBuf); + reinterpret_cast(&lpMsgBuf), + 0, + nullptr) == 0) { + return; } + // Display the error message and exit the process + const std::wstring errorMsg = std::vformat( + WMi18n::GetInstance().GetTextW(IDS_MAIN_ERROR_WINAPI_FAILURE_TEXT), + std::make_wformat_args( + functionName, + lastError, + reinterpret_cast(lpMsgBuf))); + TaskDialog( + nullptr, nullptr, PROGRAM_NAME, errorMsg.c_str(), + nullptr, TDCBF_OK_BUTTON, TD_ERROR_ICON, nullptr); + LocalFree(lpMsgBuf); } bool GetWinMuteVersion(std::wstring &versNumber) { - bool success = false; - DWORD dummy; - wchar_t szFileName[MAX_PATH]; - GetModuleFileName(nullptr, szFileName, sizeof(szFileName) / sizeof(szFileName[0])); - const DWORD versSize = GetFileVersionInfoSizeEx(FILE_VER_GET_NEUTRAL, szFileName, &dummy); - LPVOID versData = malloc(versSize); - if (versData != nullptr) { - if (GetFileVersionInfoExW( - FILE_VER_GET_NEUTRAL, - szFileName, - 0, - versSize, - versData)) { - VS_FIXEDFILEINFO *pvi; - UINT pviLen = sizeof(*pvi); - if (VerQueryValueW( - versData, - L"\\", - reinterpret_cast(&pvi), - &pviLen)) { - wchar_t buf[50]; - StringCchPrintfW( - buf, - ARRAY_SIZE(buf), - L"%d.%d.%d.%d", - pvi->dwProductVersionMS >> 16, - pvi->dwFileVersionMS & 0xFFFF, - pvi->dwFileVersionLS >> 16, - pvi->dwFileVersionLS & 0xFFFF); - versNumber = buf; - success = true; - } - } - free(versData); + DWORD unused; + wchar_t fileName[MAX_PATH]; + if (GetModuleFileNameW(nullptr, fileName, sizeof(fileName) / sizeof(fileName[0])) == 0) { + return false; + } + const DWORD versSize = GetFileVersionInfoSizeEx(FILE_VER_GET_NEUTRAL, fileName, &unused); + std::vector versData(versSize); + if (!GetFileVersionInfoExW(FILE_VER_GET_NEUTRAL, fileName, 0, versSize, versData.data())) { + return false; + } + VS_FIXEDFILEINFO *pvi = nullptr; + UINT pviLen = sizeof(*pvi); + if (!VerQueryValueW(versData.data(), L"\\", reinterpret_cast(&pvi), &pviLen)) { + return false; } - return success; + versNumber = std::format( + L"{}.{}.{}.{}", + pvi->dwProductVersionMS >> 16, + pvi->dwFileVersionMS & 0xFFFF, + pvi->dwFileVersionLS >> 16, + pvi->dwFileVersionLS & 0xFFFF); + return true; } -- 2.43.0