From 855fab8d8f7093b32cc5bbb8b5a62146ddbc22c0 Mon Sep 17 00:00:00 2001 From: Rainer Kottenhoff Date: Fri, 13 Mar 2020 01:52:41 +0100 Subject: [PATCH] + fix: .ini-file writing bug introduced in previous version --- Versions/build.txt | 2 +- minipath/src/Config.cpp | 12 +++++++----- minipath/src/Config.h | 2 +- minipath/src/Dialogs.c | 2 +- minipath/src/Helpers.c | 6 +++--- minipath/src/minipath.c | 4 ++-- res/Notepad3.exe.manifest.conf | 2 +- src/Config/Config.cpp | 8 +++++--- src/Config/Config.h | 2 +- src/Styles.c | 4 ++-- src/VersionEx.h | 2 +- 11 files changed, 25 insertions(+), 21 deletions(-) diff --git a/Versions/build.txt b/Versions/build.txt index d00491fd7..0cfbf0888 100644 --- a/Versions/build.txt +++ b/Versions/build.txt @@ -1 +1 @@ -1 +2 diff --git a/minipath/src/Config.cpp b/minipath/src/Config.cpp index 9008841e2..1de6a8c89 100644 --- a/minipath/src/Config.cpp +++ b/minipath/src/Config.cpp @@ -124,13 +124,15 @@ static HANDLE s_INI_Hndl = INVALID_HANDLE_VALUE; static CSimpleIni s_INI(s_bIsUTF8, s_bUseMultiKey, s_bUseMultiLine); -extern "C" BOOL LoadIniFile(LPCWSTR lpIniFilePath) +extern "C" BOOL LoadIniFile(LPCWSTR lpIniFilePath, BOOL bNeedReadWriteAccess) { s_INI.Reset(); s_INI.SetSpaces(s_bSetSpaces); s_INI.SetMultiLine(s_bUseMultiLine); - s_INI_Hndl = AcquireReadFileLock(lpIniFilePath, s_OvrLpd); + s_INI_Hndl = bNeedReadWriteAccess ? AcquireWriteFileLock(lpIniFilePath, s_OvrLpd) : + AcquireReadFileLock(lpIniFilePath, s_OvrLpd);; + if (s_INI_Hndl == INVALID_HANDLE_VALUE) { return false; } @@ -834,7 +836,7 @@ void LoadFlags() { __try { - LoadIniFile(g_wchIniFile); + LoadIniFile(g_wchIniFile, FALSE); const WCHAR* const Settings_Section2 = L"Settings2"; @@ -890,7 +892,7 @@ void LoadSettings() { __try { - LoadIniFile(g_wchIniFile); + LoadIniFile(g_wchIniFile, FALSE); const WCHAR* const Settings_Section = L"Settings"; @@ -1071,7 +1073,7 @@ void SaveSettings(BOOL bSaveSettingsNow) __try { - LoadIniFile(g_wchIniFile); + LoadIniFile(g_wchIniFile, TRUE); const WCHAR* const Settings_Section = L"Settings"; diff --git a/minipath/src/Config.h b/minipath/src/Config.h index a4c4a9aff..988496b43 100644 --- a/minipath/src/Config.h +++ b/minipath/src/Config.h @@ -37,7 +37,7 @@ extern "C" { // ---------------------------------------------------------------------------- - BOOL LoadIniFile(LPCWSTR lpIniFilePath); + BOOL LoadIniFile(LPCWSTR lpIniFilePath, BOOL bNeedReadWriteAccess); BOOL SaveIniFile(); void ReleaseIniFile(); diff --git a/minipath/src/Dialogs.c b/minipath/src/Dialogs.c index c3d1477de..2a9cbd061 100644 --- a/minipath/src/Dialogs.c +++ b/minipath/src/Dialogs.c @@ -2700,7 +2700,7 @@ INT_PTR CALLBACK FindTargetDlgProc(HWND hwnd,UINT umsg,WPARAM wParam,LPARAM lPar __try { - LoadIniFile(g_wchIniFile); + LoadIniFile(g_wchIniFile, TRUE); const WCHAR* const TargetApp_Section = L"Target Application"; diff --git a/minipath/src/Helpers.c b/minipath/src/Helpers.c index 5d12bc37d..f1b50d470 100644 --- a/minipath/src/Helpers.c +++ b/minipath/src/Helpers.c @@ -1530,7 +1530,7 @@ BOOL MRU_Load(LPMRULIST pmru) { MRU_Empty(pmru); __try { - LoadIniFile(g_wchIniFile); + LoadIniFile(g_wchIniFile, FALSE); const WCHAR* const RegKey_Section = pmru->szRegKey; @@ -1555,7 +1555,7 @@ BOOL MRU_Load(LPMRULIST pmru) { BOOL MRU_Save(LPMRULIST pmru) { __try { - LoadIniFile(g_wchIniFile); + LoadIniFile(g_wchIniFile, TRUE); WCHAR tchName[32]; WCHAR tchItem[1024] = { L'\0' }; @@ -1572,7 +1572,7 @@ BOOL MRU_Save(LPMRULIST pmru) { } } __finally { - SaveIniFile(g_wchIniFile); + SaveIniFile(); } return TRUE; } diff --git a/minipath/src/minipath.c b/minipath/src/minipath.c index 2f74b53d4..4c5af5419 100644 --- a/minipath/src/minipath.c +++ b/minipath/src/minipath.c @@ -1163,7 +1163,7 @@ void CreateBars(HWND hwnd,HINSTANCE hInstance) // Load toolbar labels __try { - LoadIniFile(g_wchIniFile); + LoadIniFile(g_wchIniFile, FALSE); const WCHAR* const ToolbarLabels_Section = L"Toolbar Labels"; n = 0; @@ -3330,7 +3330,7 @@ void LoadTargetParamsOnce(void) return; __try { - LoadIniFile(g_wchIniFile); + LoadIniFile(g_wchIniFile, FALSE); const WCHAR* const TargetApp_Section = L"Target Application"; if (IniSectionGetInt(TargetApp_Section, L"UseTargetApplication", 0xFB) != 0xFB) { diff --git a/res/Notepad3.exe.manifest.conf b/res/Notepad3.exe.manifest.conf index 8dd115450..2d98feed8 100644 --- a/res/Notepad3.exe.manifest.conf +++ b/res/Notepad3.exe.manifest.conf @@ -3,7 +3,7 @@ Notepad3 RC3 diff --git a/src/Config/Config.cpp b/src/Config/Config.cpp index 3672a2c68..f006280c4 100644 --- a/src/Config/Config.cpp +++ b/src/Config/Config.cpp @@ -138,13 +138,15 @@ static HANDLE s_INI_Hndl = INVALID_HANDLE_VALUE; static CSimpleIni s_INI(s_bIsUTF8, s_bUseMultiKey, s_bUseMultiLine); -extern "C" bool LoadIniFile(LPCWSTR lpIniFilePath) +extern "C" bool LoadIniFile(LPCWSTR lpIniFilePath, bool bNeedReadWriteAccess) { s_INI.Reset(); s_INI.SetSpaces(s_bSetSpaces); s_INI.SetMultiLine(s_bUseMultiLine); - s_INI_Hndl = AcquireReadFileLock(lpIniFilePath, s_OvrLpd); + s_INI_Hndl = bNeedReadWriteAccess ? AcquireWriteFileLock(lpIniFilePath, s_OvrLpd) : + AcquireReadFileLock(lpIniFilePath, s_OvrLpd);; + if (s_INI_Hndl == INVALID_HANDLE_VALUE) { return false; } @@ -842,7 +844,7 @@ bool OpenSettingsFile() if (StrIsNotEmpty(Globals.IniFile)) { CreateIniFile(); if (!IsIniFileLoaded()) { - LoadIniFile(Globals.IniFile); + LoadIniFile(Globals.IniFile, true); } } return IsIniFileLoaded(); diff --git a/src/Config/Config.h b/src/Config/Config.h index ba9c198a9..3f2c749fc 100644 --- a/src/Config/Config.h +++ b/src/Config/Config.h @@ -37,7 +37,7 @@ bool CloseSettingsFile(bool bSaveChanges); // ---------------------------------------------------------------------------- -bool LoadIniFile(LPCWSTR lpIniFilePath); +bool LoadIniFile(LPCWSTR lpIniFilePath, bool bNeedReadWriteAccess); bool IsIniFileLoaded(); void ReleaseIniFile(); bool SaveIniFile(); diff --git a/src/Styles.c b/src/Styles.c index 3b71fad23..be9253c6a 100644 --- a/src/Styles.c +++ b/src/Styles.c @@ -544,7 +544,7 @@ bool Style_ImportFromFile(const WCHAR* szFile) if (bResetToDefault) { ReleaseIniFile(); } - bool result = !bResetToDefault ? LoadIniFile(szFile) : true; + bool result = !bResetToDefault ? LoadIniFile(szFile, false) : true; if (result) { @@ -825,7 +825,7 @@ bool Style_ExportToFile(const WCHAR* szFile, bool bForceAll) } } else { - LoadIniFile(szFilePathNorm); // reset + LoadIniFile(szFilePathNorm, true); // reset Style_ToIniSection(bForceAll); ok = SaveIniFile(); } diff --git a/src/VersionEx.h b/src/VersionEx.h index 10399468a..4141a7398 100644 --- a/src/VersionEx.h +++ b/src/VersionEx.h @@ -9,7 +9,7 @@ #define VERSION_MAJOR 5 #define VERSION_MINOR 20 #define VERSION_REV 313 -#define VERSION_BUILD 1 +#define VERSION_BUILD 2 #define SCINTILLA_VER 432 #define ONIGURUMA_REGEX_VER 6.9.4 #define UCHARDET_VER 2018.09.27