diff --git a/Versions/build.txt b/Versions/build.txt
index 1e8b31496..d00491fd7 100644
--- a/Versions/build.txt
+++ b/Versions/build.txt
@@ -1 +1 @@
-6
+1
diff --git a/Versions/day.txt b/Versions/day.txt
index a1e0432c9..5478c714f 100644
--- a/Versions/day.txt
+++ b/Versions/day.txt
@@ -1 +1 @@
-312
+313
diff --git a/minipath/src/Config.cpp b/minipath/src/Config.cpp
index f193bf423..9008841e2 100644
--- a/minipath/src/Config.cpp
+++ b/minipath/src/Config.cpp
@@ -75,7 +75,7 @@ constexpr bool SI_Success(const SI_Error rc) noexcept {
// of complete file to preserve integrety of any transaction
// ----------------------------------------------------------------------------
-HANDLE AcquireFileLock(LPCWSTR lpIniFilePath, OVERLAPPED& rOvrLpd)
+HANDLE AcquireWriteFileLock(LPCWSTR lpIniFilePath, OVERLAPPED& rOvrLpd)
{
HANDLE hFile = CreateFile(lpIniFilePath,
GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
@@ -89,6 +89,20 @@ HANDLE AcquireFileLock(LPCWSTR lpIniFilePath, OVERLAPPED& rOvrLpd)
// ----------------------------------------------------------------------------
+HANDLE AcquireReadFileLock(LPCWSTR lpIniFilePath, OVERLAPPED& rOvrLpd)
+{
+ HANDLE hFile = CreateFile(lpIniFilePath,
+ GENERIC_READ, FILE_SHARE_READ,
+ nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);
+
+ DWORD const flags = LOCKFILE_EXCLUSIVE_LOCK;
+ bool const bLocked = LockFileEx(hFile, flags, 0, MAXDWORD, 0, &rOvrLpd);
+
+ return (bLocked ? hFile : INVALID_HANDLE_VALUE);
+}
+
+// ----------------------------------------------------------------------------
+
bool ReleaseFileLock(HANDLE hFile, OVERLAPPED& rOvrLpd)
{
bool bUnLocked = true;
@@ -116,7 +130,7 @@ extern "C" BOOL LoadIniFile(LPCWSTR lpIniFilePath)
s_INI.SetSpaces(s_bSetSpaces);
s_INI.SetMultiLine(s_bUseMultiLine);
- s_INI_Hndl = AcquireFileLock(lpIniFilePath, s_OvrLpd);
+ s_INI_Hndl = AcquireReadFileLock(lpIniFilePath, s_OvrLpd);
if (s_INI_Hndl == INVALID_HANDLE_VALUE) {
return false;
}
@@ -316,7 +330,7 @@ extern "C" size_t IniFileGetString(LPCWSTR lpFilePath, LPCWSTR lpSectionName, LP
CSimpleIni Ini(s_bIsUTF8, s_bUseMultiKey, s_bUseMultiLine);
OVERLAPPED ovrLpd = { 0 };
- HANDLE hFile = AcquireFileLock(lpFilePath, ovrLpd);
+ HANDLE hFile = AcquireReadFileLock(lpFilePath, ovrLpd);
if (hFile == INVALID_HANDLE_VALUE) {
StringCchCopyW(lpReturnedString, cchReturnedString, lpDefault);
return (size_t)lstrlen(lpReturnedString);
@@ -344,7 +358,7 @@ extern "C" BOOL IniFileSetString(LPCWSTR lpFilePath, LPCWSTR lpSectionName, LPCW
Ini.SetSpaces(s_bSetSpaces);
OVERLAPPED ovrLpd = { 0 };
- HANDLE hFile = AcquireFileLock(lpFilePath, ovrLpd);
+ HANDLE hFile = AcquireWriteFileLock(lpFilePath, ovrLpd);
if (hFile == INVALID_HANDLE_VALUE) {
return false;
}
@@ -370,7 +384,7 @@ extern "C" int IniFileGetInt(LPCWSTR lpFilePath, LPCWSTR lpSectionName, LPCWSTR
CSimpleIni Ini(s_bIsUTF8, s_bUseMultiKey, s_bUseMultiLine);
OVERLAPPED ovrLpd = { 0 };
- HANDLE hFile = AcquireFileLock(lpFilePath, ovrLpd);
+ HANDLE hFile = AcquireReadFileLock(lpFilePath, ovrLpd);
if (hFile == INVALID_HANDLE_VALUE) {
return iDefault;
}
@@ -396,7 +410,7 @@ extern "C" BOOL IniFileSetInt(LPCWSTR lpFilePath, LPCWSTR lpSectionName, LPCWSTR
Ini.SetSpaces(s_bSetSpaces);
OVERLAPPED ovrLpd = { 0 };
- HANDLE hFile = AcquireFileLock(lpFilePath, ovrLpd);
+ HANDLE hFile = AcquireWriteFileLock(lpFilePath, ovrLpd);
if (hFile == INVALID_HANDLE_VALUE) {
return false;
}
@@ -419,7 +433,7 @@ extern "C" BOOL IniFileGetBool(LPCWSTR lpFilePath, LPCWSTR lpSectionName, LPCWST
CSimpleIni Ini(s_bIsUTF8, s_bUseMultiKey, s_bUseMultiLine);
OVERLAPPED ovrLpd = { 0 };
- HANDLE hFile = AcquireFileLock(lpFilePath, ovrLpd);
+ HANDLE hFile = AcquireReadFileLock(lpFilePath, ovrLpd);
if (hFile == INVALID_HANDLE_VALUE) {
return bDefault;
}
@@ -445,7 +459,7 @@ extern "C" BOOL IniFileSetBool(LPCWSTR lpFilePath, LPCWSTR lpSectionName, LPCWST
Ini.SetSpaces(s_bSetSpaces);
OVERLAPPED ovrLpd = { 0 };
- HANDLE hFile = AcquireFileLock(lpFilePath, ovrLpd);
+ HANDLE hFile = AcquireWriteFileLock(lpFilePath, ovrLpd);
if (hFile == INVALID_HANDLE_VALUE) {
return false;
}
@@ -469,7 +483,7 @@ extern "C" BOOL IniFileDelete(LPCWSTR lpFilePath, LPCWSTR lpSectionName, LPCWSTR
Ini.SetSpaces(s_bSetSpaces);
OVERLAPPED ovrLpd = { 0 };
- HANDLE hFile = AcquireFileLock(lpFilePath, ovrLpd);
+ HANDLE hFile = AcquireWriteFileLock(lpFilePath, ovrLpd);
if (hFile == INVALID_HANDLE_VALUE) {
return false;
}
@@ -492,7 +506,7 @@ extern "C" BOOL IniFileIterateSection(LPCWSTR lpFilePath, LPCWSTR lpSectionName,
CSimpleIni Ini(s_bIsUTF8, s_bUseMultiKey, s_bUseMultiLine);
OVERLAPPED ovrLpd = { 0 };
- HANDLE hFile = AcquireFileLock(lpFilePath, ovrLpd);
+ HANDLE hFile = AcquireReadFileLock(lpFilePath, ovrLpd);
if (hFile == INVALID_HANDLE_VALUE) {
return false;
}
@@ -585,14 +599,15 @@ int CreateIniFile()
}
}
else {
- OVERLAPPED ovrLpd = { 0 };
- HANDLE hFile = AcquireFileLock(g_wchIniFile, ovrLpd);
+ HANDLE hFile = CreateFile(g_wchIniFile,
+ GENERIC_READ, FILE_SHARE_READ,
+ nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);
if (hFile == INVALID_HANDLE_VALUE) {
return result;
}
DWORD dwFSHigh = 0UL;
dwFileSize = GetFileSize(hFile, &dwFSHigh);
- ReleaseFileLock(hFile, ovrLpd);
+ CloseHandle(hFile);
}
if ((dwFileSize == 0) && (dwFileSize != INVALID_FILE_SIZE)) {
diff --git a/res/Notepad3.exe.manifest.conf b/res/Notepad3.exe.manifest.conf
index 40d30beb7..8dd115450 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 7b64ae485..3672a2c68 100644
--- a/src/Config/Config.cpp
+++ b/src/Config/Config.cpp
@@ -89,7 +89,7 @@ constexpr bool SI_Success(const SI_Error rc) noexcept {
// of complete file to preserve integrety of any transaction
// ----------------------------------------------------------------------------
-HANDLE AcquireFileLock(LPCWSTR lpIniFilePath, OVERLAPPED& rOvrLpd)
+HANDLE AcquireWriteFileLock(LPCWSTR lpIniFilePath, OVERLAPPED& rOvrLpd)
{
HANDLE hFile = CreateFile(lpIniFilePath,
GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
@@ -103,6 +103,20 @@ HANDLE AcquireFileLock(LPCWSTR lpIniFilePath, OVERLAPPED& rOvrLpd)
// ----------------------------------------------------------------------------
+HANDLE AcquireReadFileLock(LPCWSTR lpIniFilePath, OVERLAPPED& rOvrLpd)
+{
+ HANDLE hFile = CreateFile(lpIniFilePath,
+ GENERIC_READ, FILE_SHARE_READ,
+ nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);
+
+ DWORD const flags = LOCKFILE_EXCLUSIVE_LOCK;
+ bool const bLocked = LockFileEx(hFile, flags, 0, MAXDWORD, 0, &rOvrLpd);
+
+ return (bLocked ? hFile : INVALID_HANDLE_VALUE);
+}
+
+// ----------------------------------------------------------------------------
+
bool ReleaseFileLock(HANDLE hFile, OVERLAPPED& rOvrLpd)
{
bool bUnLocked = true;
@@ -130,7 +144,7 @@ extern "C" bool LoadIniFile(LPCWSTR lpIniFilePath)
s_INI.SetSpaces(s_bSetSpaces);
s_INI.SetMultiLine(s_bUseMultiLine);
- s_INI_Hndl = AcquireFileLock(lpIniFilePath, s_OvrLpd);
+ s_INI_Hndl = AcquireReadFileLock(lpIniFilePath, s_OvrLpd);
if (s_INI_Hndl == INVALID_HANDLE_VALUE) {
return false;
}
@@ -330,7 +344,7 @@ extern "C" size_t IniFileGetString(LPCWSTR lpFilePath, LPCWSTR lpSectionName, LP
CSimpleIni Ini(s_bIsUTF8, s_bUseMultiKey, s_bUseMultiLine);
OVERLAPPED ovrLpd = { 0 };
- HANDLE hFile = AcquireFileLock(lpFilePath, ovrLpd);
+ HANDLE hFile = AcquireReadFileLock(lpFilePath, ovrLpd);
if (hFile == INVALID_HANDLE_VALUE) {
StringCchCopyW(lpReturnedString, cchReturnedString, lpDefault);
return StringCchLenW(lpReturnedString, cchReturnedString);
@@ -358,7 +372,7 @@ extern "C" bool IniFileSetString(LPCWSTR lpFilePath, LPCWSTR lpSectionName, LPCW
Ini.SetSpaces(s_bSetSpaces);
OVERLAPPED ovrLpd = { 0 };
- HANDLE hFile = AcquireFileLock(lpFilePath, ovrLpd);
+ HANDLE hFile = AcquireWriteFileLock(lpFilePath, ovrLpd);
if (hFile == INVALID_HANDLE_VALUE) {
return false;
}
@@ -384,7 +398,7 @@ extern "C" int IniFileGetInt(LPCWSTR lpFilePath, LPCWSTR lpSectionName, LPCWSTR
CSimpleIni Ini(s_bIsUTF8, s_bUseMultiKey, s_bUseMultiLine);
OVERLAPPED ovrLpd = { 0 };
- HANDLE hFile = AcquireFileLock(lpFilePath, ovrLpd);
+ HANDLE hFile = AcquireReadFileLock(lpFilePath, ovrLpd);
if (hFile == INVALID_HANDLE_VALUE) {
return iDefault;
}
@@ -410,7 +424,7 @@ extern "C" bool IniFileSetInt(LPCWSTR lpFilePath, LPCWSTR lpSectionName, LPCWSTR
Ini.SetSpaces(s_bSetSpaces);
OVERLAPPED ovrLpd = { 0 };
- HANDLE hFile = AcquireFileLock(lpFilePath, ovrLpd);
+ HANDLE hFile = AcquireWriteFileLock(lpFilePath, ovrLpd);
if (hFile == INVALID_HANDLE_VALUE) {
return false;
}
@@ -433,7 +447,7 @@ extern "C" bool IniFileGetBool(LPCWSTR lpFilePath, LPCWSTR lpSectionName, LPCWST
CSimpleIni Ini(s_bIsUTF8, s_bUseMultiKey, s_bUseMultiLine);
OVERLAPPED ovrLpd = { 0 };
- HANDLE hFile = AcquireFileLock(lpFilePath, ovrLpd);
+ HANDLE hFile = AcquireReadFileLock(lpFilePath, ovrLpd);
if (hFile == INVALID_HANDLE_VALUE) {
return bDefault;
}
@@ -459,7 +473,7 @@ extern "C" bool IniFileSetBool(LPCWSTR lpFilePath, LPCWSTR lpSectionName, LPCWST
Ini.SetSpaces(s_bSetSpaces);
OVERLAPPED ovrLpd = { 0 };
- HANDLE hFile = AcquireFileLock(lpFilePath, ovrLpd);
+ HANDLE hFile = AcquireWriteFileLock(lpFilePath, ovrLpd);
if (hFile == INVALID_HANDLE_VALUE) {
return false;
}
@@ -483,7 +497,7 @@ extern "C" bool IniFileDelete(LPCWSTR lpFilePath, LPCWSTR lpSectionName, LPCWSTR
Ini.SetSpaces(s_bSetSpaces);
OVERLAPPED ovrLpd = { 0 };
- HANDLE hFile = AcquireFileLock(lpFilePath, ovrLpd);
+ HANDLE hFile = AcquireWriteFileLock(lpFilePath, ovrLpd);
if (hFile == INVALID_HANDLE_VALUE) {
return false;
}
@@ -506,7 +520,7 @@ extern "C" bool IniFileIterateSection(LPCWSTR lpFilePath, LPCWSTR lpSectionName,
CSimpleIni Ini(s_bIsUTF8, s_bUseMultiKey, s_bUseMultiLine);
OVERLAPPED ovrLpd = { 0 };
- HANDLE hFile = AcquireFileLock(lpFilePath, ovrLpd);
+ HANDLE hFile = AcquireReadFileLock(lpFilePath, ovrLpd);
if (hFile == INVALID_HANDLE_VALUE) {
return false;
}
@@ -790,16 +804,17 @@ extern "C" bool CreateIniFile()
}
}
else {
- OVERLAPPED ovrLpd = { 0 };
- HANDLE hFile = AcquireFileLock(Globals.IniFile, ovrLpd);
+ HANDLE hFile = CreateFile(Globals.IniFile,
+ GENERIC_READ, FILE_SHARE_READ,
+ nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);
if (hFile == INVALID_HANDLE_VALUE) {
Globals.dwLastError = GetLastError();
- MsgBoxLastError(L"Accessing Settings-File failed!", Globals.dwLastError);
+ MsgBoxLastError(L"Read Access to Settings-File failed!", Globals.dwLastError);
return result;
}
DWORD dwFSHigh = 0UL;
dwFileSize = GetFileSize(hFile, &dwFSHigh);
- ReleaseFileLock(hFile, ovrLpd);
+ CloseHandle(hFile);
}
if ((dwFileSize == 0) && (dwFileSize != INVALID_FILE_SIZE)) {
diff --git a/src/VersionEx.h b/src/VersionEx.h
index 728ce485a..10399468a 100644
--- a/src/VersionEx.h
+++ b/src/VersionEx.h
@@ -8,8 +8,8 @@
#define SAPPNAME "Notepad3"
#define VERSION_MAJOR 5
#define VERSION_MINOR 20
-#define VERSION_REV 312
-#define VERSION_BUILD 6
+#define VERSION_REV 313
+#define VERSION_BUILD 1
#define SCINTILLA_VER 432
#define ONIGURUMA_REGEX_VER 6.9.4
#define UCHARDET_VER 2018.09.27