From 1de35f8c6de48327a22486ef7799074f68d6d5fa Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Mon, 30 Mar 2020 23:19:36 +0200 Subject: [PATCH] + fix: translatable error message format (msgbox) + chg: add filepath to message on file locking error --- language/common_res.h | 1 + language/np3_en_us/strings_en_us.rc | 1 + src/Config/Config.cpp | 30 ++++++++++++--- src/Config/SimpleIni.h | 60 ++++++++++++++++++----------- src/Dialogs.c | 10 ++--- 5 files changed, 69 insertions(+), 33 deletions(-) diff --git a/language/common_res.h b/language/common_res.h index 9754318ad..0d2d01219 100644 --- a/language/common_res.h +++ b/language/common_res.h @@ -80,6 +80,7 @@ #define IDS_MUI_WARN_LOAD_BIG_FILE 13015 #define IDS_MUI_ERR_FILE_TOO_LARGE 13016 #define IDS_MUI_WARN_UNKNOWN_EXT 13017 +#define IDS_MUI_ERR_DLG_FORMAT 13018 // keep order (CRLF(0), CR(1), LF(2)) #define IDS_MUI_EOLMODENAME_CRLF 13020 #define IDS_MUI_EOLMODENAME_CR 13021 diff --git a/language/np3_en_us/strings_en_us.rc b/language/np3_en_us/strings_en_us.rc index 54b58bf7b..644e73823 100644 --- a/language/np3_en_us/strings_en_us.rc +++ b/language/np3_en_us/strings_en_us.rc @@ -126,6 +126,7 @@ STRINGTABLE BEGIN IDS_MUI_ERR_LOADFILE "Error loading ""%s""." IDS_MUI_ERR_SAVEFILE "Error saving ""%s""." + IDS_MUI_ERR_DLG_FORMAT "Error '%s', cause:\n%s(ID:%d)\n" IDS_MUI_ERR_BROWSE "No file browser plugin was found.\nThe MiniPath file browser plugin can be downloaded from https://rizonesoft.com." IDS_MUI_ERR_GREPWIN "No file search plugin was found.\nThe grepWinNP3 file search plugin can be downloaded from https://rizonesoft.com." IDS_MUI_ERR_MRUDLG "No access to the selected file!\nWould you like to remove it from the list?" diff --git a/src/Config/Config.cpp b/src/Config/Config.cpp index 3183dce73..7bd2cc9f7 100644 --- a/src/Config/Config.cpp +++ b/src/Config/Config.cpp @@ -102,11 +102,17 @@ HANDLE AcquireWriteFileLock(LPCWSTR lpIniFilePath, OVERLAPPED& rOvrLpd) { bLocked = LockFileEx(hFile, LOCKFILE_EXCLUSIVE_LOCK, 0, MAXDWORD, 0, &rOvrLpd); // wait for exclusive lock if (!bLocked) { - MsgBoxLastError(L"AcquireWriteFileLock(): NO EXCLUSIVE LOCK ACQUIRED!", 0); + wchar_t msg[MAX_PATH + 128] = { 0 }; + StringCchPrintf(msg, ARRAYSIZE(msg), + L"AcquireWriteFileLock(%s): NO EXCLUSIVE LOCK ACQUIRED!", lpIniFilePath); + MsgBoxLastError(msg, 0); } } else { - MsgBoxLastError(L"AcquireWriteFileLock(): INVALID FILE HANDLE!", 0); + wchar_t msg[MAX_PATH + 128] = { 0 }; + StringCchPrintf(msg, ARRAYSIZE(msg), + L"AcquireWriteFileLock(%s): INVALID FILE HANDLE!", lpIniFilePath); + MsgBoxLastError(msg, 0); } return (bLocked ? hFile : INVALID_HANDLE_VALUE); } @@ -129,11 +135,17 @@ HANDLE AcquireReadFileLock(LPCWSTR lpIniFilePath, OVERLAPPED& rOvrLpd) { bLocked = LockFileEx(hFile, LOCKFILE_SHARED_LOCK, 0, MAXDWORD, 0, &rOvrLpd); if (!bLocked) { - MsgBoxLastError(L"AcquireReadFileLock(): NO READER LOCK ACQUIRED!", 0); + wchar_t msg[MAX_PATH + 128] = { 0 }; + StringCchPrintf(msg, ARRAYSIZE(msg), + L"AcquireReadFileLock(%s): NO READER LOCK ACQUIRED!", lpIniFilePath); + MsgBoxLastError(msg, 0); } } else { - MsgBoxLastError(L"AcquireReadFileLock(): INVALID FILE HANDLE", 0); + wchar_t msg[MAX_PATH + 128] = { 0 }; + StringCchPrintf(msg, ARRAYSIZE(msg), + L"AcquireReadFileLock(%s): INVALID FILE HANDLE!", lpIniFilePath); + MsgBoxLastError(msg, 0); } return (bLocked ? hFile : INVALID_HANDLE_VALUE); } @@ -915,7 +927,10 @@ extern "C" bool CreateIniFile() CloseHandle(hFile); // done } else { - MsgBoxLastError(L"CreateIniFile(): FAILD TO CREATE INITIAL INI FILE!", 0); + wchar_t msg[MAX_PATH + 128] = { 0 }; + StringCchPrintf(msg, ARRAYSIZE(msg), + L"CreateIniFile(%s): FAILD TO CREATE INITIAL INI FILE!", Globals.IniFile); + MsgBoxLastError(msg, 0); } } else { @@ -929,7 +944,10 @@ extern "C" bool CreateIniFile() CloseHandle(hFile); } else { - MsgBoxLastError(L"CreateIniFile(): FAILED TO GET FILESIZE!", 0); + wchar_t msg[MAX_PATH + 128] = { 0 }; + StringCchPrintf(msg, ARRAYSIZE(msg), + L"CreateIniFile(%s): FAILED TO GET FILESIZE!", Globals.IniFile); + MsgBoxLastError(msg, 0); dwFileSize = INVALID_FILE_SIZE; } } diff --git a/src/Config/SimpleIni.h b/src/Config/SimpleIni.h index 839a8a516..6e00cb84b 100644 --- a/src/Config/SimpleIni.h +++ b/src/Config/SimpleIni.h @@ -246,6 +246,7 @@ #include #include #include +#include #ifdef SI_SUPPORT_IOSTREAMS # include @@ -1429,19 +1430,27 @@ CSimpleIniTempl::LoadFile( const SI_WCHAR_T* a_pwszFile ) { - HANDLE hFile = CreateFile(a_pwszFile, - GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, - nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr); + if (a_pwszFile && a_pwszFile[0]) + { + HANDLE hFile = CreateFile(a_pwszFile, + GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, + nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr); - if (hFile == INVALID_HANDLE_VALUE) { - MsgBoxLastError(L"CSimpleIni::LoadFile(): INVALID_HANDLE_VALUE!", 0); - return SI_Error::SI_FILE; + if (hFile == INVALID_HANDLE_VALUE) { + wchar_t msg[MAX_PATH + 128] = { 0 }; + StringCchPrintf(msg, ARRAYSIZE(msg), + L"CSimpleIni::LoadFile(%s): INVALID_HANDLE_VALUE!", a_pwszFile); + MsgBoxLastError(msg, 0); + + return SI_Error::SI_FILE; + } + + SI_Error rc = LoadFile(hFile); + + CloseHandle(hFile); + return rc; } - - SI_Error rc = LoadFile(hFile); - - CloseHandle(hFile); - return rc; + return SI_Error::SI_FILE; } #else @@ -2629,19 +2638,26 @@ CSimpleIniTempl::SaveFile( bool a_bAddSignature ) const { - HANDLE hFile = CreateFile(a_pwszFile, - GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, - nullptr, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr); + if (a_pwszFile && a_pwszFile[0]) + { + HANDLE hFile = CreateFile(a_pwszFile, + GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, + nullptr, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr); - if (hFile == INVALID_HANDLE_VALUE) { - MsgBoxLastError(L"CSimpleIni::SaveFile(): INVALID_HANDLE_VALUE!", 0); - return SI_Error::SI_FILE; + if (hFile == INVALID_HANDLE_VALUE) { + wchar_t msg[MAX_PATH + 128] = { 0 }; + StringCchPrintf(msg, ARRAYSIZE(msg), + L"CSimpleIni::SaveFile(%s): INVALID_HANDLE_VALUE!", a_pwszFile); + MsgBoxLastError(msg, 0); + return SI_Error::SI_FILE; + } + + SI_Error rc = SaveFile(hFile, a_bAddSignature); + + CloseHandle(hFile); + return rc; } - - SI_Error rc = SaveFile(hFile, a_bAddSignature); - - CloseHandle(hFile); - return rc; + return SI_Error::SI_FILE; } #else diff --git a/src/Dialogs.c b/src/Dialogs.c index 0a3c00fec..b04ddde0d 100644 --- a/src/Dialogs.c +++ b/src/Dialogs.c @@ -158,18 +158,18 @@ DWORD MsgBoxLastError(LPCWSTR lpszMessage, DWORD dwErrID) NULL, dwErrID, Globals.iPrefLANGID, - (LPTSTR)&lpMsgBuf, + (LPWSTR)&lpMsgBuf, 0, NULL); if (lpMsgBuf) { // Display the error message and exit the process - size_t const len = StringCchLenW((LPCWSTR)lpMsgBuf, 0) + StringCchLenW(lpszMessage, 0) + 80; + size_t const len = StringCchLen((LPCWSTR)lpMsgBuf, 0) + StringCchLen(lpszMessage, 0) + 160; LPWSTR lpDisplayBuf = (LPWSTR)AllocMem(len * sizeof(WCHAR), HEAP_ZERO_MEMORY); if (lpDisplayBuf) { - StringCchPrintf(lpDisplayBuf, len, L"Error: '%s' failed with error id %d:\n%s.\n", - lpszMessage, dwErrID, (LPCWSTR)lpMsgBuf); - + WCHAR msgFormat[128] = { L'\0' }; + GetLngString(IDS_MUI_ERR_DLG_FORMAT, msgFormat, COUNTOF(msgFormat)); + StringCchPrintf(lpDisplayBuf, len, msgFormat, lpszMessage, (LPCWSTR)lpMsgBuf, dwErrID); // center message box to main HWND focus = GetFocus(); HWND hwnd = focus ? focus : Globals.hwndMain;