prototype .ini-file locking

This commit is contained in:
Rainer Kottenhoff 2020-03-23 08:10:12 +01:00
parent 9b8c4fe51f
commit 3f5a88478e
3 changed files with 32 additions and 10 deletions

View File

@ -91,13 +91,22 @@ constexpr bool SI_Success(const SI_Error rc) noexcept {
HANDLE AcquireWriteFileLock(LPCWSTR lpIniFilePath, OVERLAPPED& rOvrLpd)
{
HANDLE hFile = CreateFile(lpIniFilePath,
GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
bool bLocked = false;
HANDLE hFile = CreateFile(lpIniFilePath,
GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
nullptr, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr);
DWORD const flags = LOCKFILE_EXCLUSIVE_LOCK;
bool const bLocked = LockFileEx(hFile, flags, 0, MAXDWORD, 0, &rOvrLpd);
if (hFile != INVALID_HANDLE_VALUE) {
DWORD const flags = LOCKFILE_EXCLUSIVE_LOCK;
bLocked = LockFileEx(hFile, flags, 0, MAXDWORD, 0, &rOvrLpd);
if (!bLocked) {
MsgBoxLastError(L"AcquireWriteFileLock(): NO LOCK ACQUIRED!", 0); // @@@§§§
}
}
else {
MsgBoxLastError(L"AcquireWriteFileLock(): INVALID_HANDLE_VALUE!", 0); // @@@§§§
}
return (bLocked ? hFile : INVALID_HANDLE_VALUE);
}
@ -105,13 +114,22 @@ HANDLE AcquireWriteFileLock(LPCWSTR lpIniFilePath, OVERLAPPED& rOvrLpd)
HANDLE AcquireReadFileLock(LPCWSTR lpIniFilePath, OVERLAPPED& rOvrLpd)
{
bool bLocked = false;
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);
if (hFile != INVALID_HANDLE_VALUE) {
DWORD const flags = LOCKFILE_EXCLUSIVE_LOCK;
bLocked = LockFileEx(hFile, flags, 0, MAXDWORD, 0, &rOvrLpd);
if (!bLocked) {
MsgBoxLastError(L"AcquireReadFileLock(): NO LOCK ACQUIRED!", 0); // @@@§§§
}
}
else {
MsgBoxLastError(L"AcquireReadFileLock(): INVALID_HANDLE_VALUE", 0); // @@@§§§
}
return (bLocked ? hFile : INVALID_HANDLE_VALUE);
}
@ -816,6 +834,7 @@ extern "C" bool CreateIniFile()
CloseHandle(hFile);
}
else {
MsgBoxLastError(L"CreateIniFile(): INVALID_HANDLE_VALUE!", 0); // @@@§§§
dwFileSize = INVALID_FILE_SIZE;
}
}

View File

@ -1434,6 +1434,7 @@ CSimpleIniTempl<SI_CHAR, SI_STRLESS, SI_CONVERTER>::LoadFile(
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;
}
@ -2629,10 +2630,11 @@ CSimpleIniTempl<SI_CHAR, SI_STRLESS, SI_CONVERTER>::SaveFile(
) const
{
HANDLE hFile = CreateFile(a_pwszFile,
FILE_GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
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;
}

View File

@ -9404,7 +9404,8 @@ bool FileLoad(bool bDontSave, bool bNew, bool bReload,
}
if (bCreateFile) {
HANDLE hFile = CreateFile(szFileName,
GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL);
Globals.dwLastError = GetLastError();
fSuccess = (hFile != INVALID_HANDLE_VALUE);