Revert "Add hack to fix ConfigFile ABI of last hack"
This reverts commit 8b6d936385f011b48958b14b4150dda24a811419. Fixes a number of isses with ConfigFile, and prevents the hotkey thread from potentially corrupting the config file.
This commit is contained in:
parent
4c5be81734
commit
ba7a078694
@ -27,17 +27,6 @@
|
|||||||
//
|
//
|
||||||
// ...yes, I really need to rewrite this file, I know.
|
// ...yes, I really need to rewrite this file, I know.
|
||||||
|
|
||||||
struct InternalUselessStuff
|
|
||||||
{
|
|
||||||
TSTR lpActualFileData;
|
|
||||||
HANDLE hHorribleThreadSafetyMutex;
|
|
||||||
|
|
||||||
inline InternalUselessStuff() {hHorribleThreadSafetyMutex = OSCreateMutex();}
|
|
||||||
inline ~InternalUselessStuff() {OSCloseMutex(hHorribleThreadSafetyMutex);}
|
|
||||||
};
|
|
||||||
|
|
||||||
#define InternalStuff reinterpret_cast<InternalUselessStuff*>(lpFileData)
|
|
||||||
|
|
||||||
|
|
||||||
/*=========================================================
|
/*=========================================================
|
||||||
Config
|
Config
|
||||||
@ -47,9 +36,6 @@ BOOL ConfigFile::Create(CTSTR lpConfigFile)
|
|||||||
{
|
{
|
||||||
strFileName = lpConfigFile;
|
strFileName = lpConfigFile;
|
||||||
|
|
||||||
if (!lpFileData)
|
|
||||||
lpFileData = (TSTR)new InternalUselessStuff;
|
|
||||||
|
|
||||||
if(LoadFile(XFILE_CREATEALWAYS))
|
if(LoadFile(XFILE_CREATEALWAYS))
|
||||||
LoadData();
|
LoadData();
|
||||||
else
|
else
|
||||||
@ -62,10 +48,7 @@ BOOL ConfigFile::Open(CTSTR lpConfigFile, BOOL bOpenAlways)
|
|||||||
{
|
{
|
||||||
strFileName = lpConfigFile;
|
strFileName = lpConfigFile;
|
||||||
|
|
||||||
if (!lpFileData)
|
if(LoadFile(bOpenAlways ? XFILE_OPENALWAYS : XFILE_OPENEXISTING))
|
||||||
lpFileData = (TSTR)new InternalUselessStuff;
|
|
||||||
|
|
||||||
if (LoadFile(bOpenAlways ? XFILE_OPENALWAYS : XFILE_OPENEXISTING))
|
|
||||||
LoadData();
|
LoadData();
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
@ -73,9 +56,6 @@ BOOL ConfigFile::Open(CTSTR lpConfigFile, BOOL bOpenAlways)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define hHorribleThreadSafetyMutex reinterpret_cast<InternalUselessStuff*>(lpFileData)->hHorribleThreadSafetyMutex
|
|
||||||
#define lpActualFileData reinterpret_cast<InternalUselessStuff*>(lpFileData)->lpActualFileData
|
|
||||||
|
|
||||||
BOOL ConfigFile::LoadFile(DWORD dwOpenMode)
|
BOOL ConfigFile::LoadFile(DWORD dwOpenMode)
|
||||||
{
|
{
|
||||||
XFile file;
|
XFile file;
|
||||||
@ -109,8 +89,8 @@ BOOL ConfigFile::LoadFile(DWORD dwOpenMode)
|
|||||||
lpTempFileData[dwLength+4] = 0;
|
lpTempFileData[dwLength+4] = 0;
|
||||||
file.Close();
|
file.Close();
|
||||||
|
|
||||||
lpActualFileData = utf8_createTstr(lpTempFileData);
|
lpFileData = utf8_createTstr(lpTempFileData);
|
||||||
dwLength = slen(lpActualFileData);
|
dwLength = slen(lpFileData);
|
||||||
Free(lpTempFileData);
|
Free(lpTempFileData);
|
||||||
|
|
||||||
bOpen = 1;
|
bOpen = 1;
|
||||||
@ -123,7 +103,7 @@ BOOL ConfigFile::LoadFile(DWORD dwOpenMode)
|
|||||||
void ConfigFile::LoadData()
|
void ConfigFile::LoadData()
|
||||||
{
|
{
|
||||||
OSEnterMutex(hHorribleThreadSafetyMutex);
|
OSEnterMutex(hHorribleThreadSafetyMutex);
|
||||||
TSTR lpCurLine = lpActualFileData, lpNextLine;
|
TSTR lpCurLine = lpFileData, lpNextLine;
|
||||||
ConfigSection *lpCurSection=NULL;
|
ConfigSection *lpCurSection=NULL;
|
||||||
DWORD i;
|
DWORD i;
|
||||||
|
|
||||||
@ -187,9 +167,6 @@ void ConfigFile::LoadData()
|
|||||||
|
|
||||||
void ConfigFile::Close()
|
void ConfigFile::Close()
|
||||||
{
|
{
|
||||||
if (!bOpen)
|
|
||||||
return;
|
|
||||||
|
|
||||||
OSEnterMutex(hHorribleThreadSafetyMutex);
|
OSEnterMutex(hHorribleThreadSafetyMutex);
|
||||||
DWORD i,j,k;
|
DWORD i,j,k;
|
||||||
|
|
||||||
@ -212,21 +189,15 @@ void ConfigFile::Close()
|
|||||||
}
|
}
|
||||||
Sections.Clear();
|
Sections.Clear();
|
||||||
|
|
||||||
if(lpActualFileData)
|
if(lpFileData)
|
||||||
{
|
{
|
||||||
Free(lpActualFileData);
|
Free(lpFileData);
|
||||||
lpActualFileData = NULL;
|
lpFileData = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
bOpen = 0;
|
bOpen = 0;
|
||||||
|
|
||||||
OSLeaveMutex(hHorribleThreadSafetyMutex);
|
OSLeaveMutex(hHorribleThreadSafetyMutex);
|
||||||
|
|
||||||
if (lpFileData)
|
|
||||||
{
|
|
||||||
delete reinterpret_cast<InternalUselessStuff*>(lpFileData);
|
|
||||||
lpFileData = NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL ConfigFile::SaveAs(CTSTR lpPath)
|
BOOL ConfigFile::SaveAs(CTSTR lpPath)
|
||||||
@ -245,7 +216,7 @@ BOOL ConfigFile::SaveAs(CTSTR lpPath)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!newFile.WriteAsUTF8(lpActualFileData))
|
if (!newFile.WriteAsUTF8(lpFileData))
|
||||||
{
|
{
|
||||||
OSLeaveMutex(hHorribleThreadSafetyMutex);
|
OSLeaveMutex(hHorribleThreadSafetyMutex);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -877,7 +848,7 @@ void ConfigFile::SetKey(CTSTR lpSection, CTSTR lpKey, CTSTR newvalue)
|
|||||||
OSEnterMutex(hHorribleThreadSafetyMutex);
|
OSEnterMutex(hHorribleThreadSafetyMutex);
|
||||||
assert(lpSection);
|
assert(lpSection);
|
||||||
assert(lpKey);
|
assert(lpKey);
|
||||||
TSTR lpTemp = lpActualFileData, lpEnd = &lpActualFileData[dwLength], lpSectionStart;
|
TSTR lpTemp = lpFileData, lpEnd = &lpFileData[dwLength], lpSectionStart;
|
||||||
DWORD dwSectionNameSize = slen(lpSection), dwKeyNameSize = slen(lpKey);
|
DWORD dwSectionNameSize = slen(lpSection), dwKeyNameSize = slen(lpKey);
|
||||||
BOOL bInSection = 0;
|
BOOL bInSection = 0;
|
||||||
|
|
||||||
@ -902,7 +873,7 @@ void ConfigFile::SetKey(CTSTR lpSection, CTSTR lpKey, CTSTR newvalue)
|
|||||||
|
|
||||||
XFile file(strFileName, XFILE_WRITE, XFILE_CREATEALWAYS);
|
XFile file(strFileName, XFILE_WRITE, XFILE_CREATEALWAYS);
|
||||||
file.Write("\xEF\xBB\xBF", 3);
|
file.Write("\xEF\xBB\xBF", 3);
|
||||||
file.WriteAsUTF8(&lpActualFileData[2], dwLength-4);
|
file.WriteAsUTF8(&lpFileData[2], dwLength-4);
|
||||||
file.Write("\r\n[", 3);
|
file.Write("\r\n[", 3);
|
||||||
file.WriteAsUTF8(lpSection, dwSectionNameSize);
|
file.WriteAsUTF8(lpSection, dwSectionNameSize);
|
||||||
file.Write("]\r\n", 3);
|
file.Write("]\r\n", 3);
|
||||||
@ -925,7 +896,7 @@ void ConfigFile::SetKey(CTSTR lpSection, CTSTR lpKey, CTSTR newvalue)
|
|||||||
{
|
{
|
||||||
XFile file(strFileName, XFILE_WRITE, XFILE_CREATEALWAYS);
|
XFile file(strFileName, XFILE_WRITE, XFILE_CREATEALWAYS);
|
||||||
file.Write("\xEF\xBB\xBF", 3);
|
file.Write("\xEF\xBB\xBF", 3);
|
||||||
file.WriteAsUTF8(&lpActualFileData[2], DWORD(lpSectionStart-lpActualFileData-2));
|
file.WriteAsUTF8(&lpFileData[2], DWORD(lpSectionStart-lpFileData-2));
|
||||||
file.WriteAsUTF8(lpKey, dwKeyNameSize);
|
file.WriteAsUTF8(lpKey, dwKeyNameSize);
|
||||||
file.Write("=", 1);
|
file.Write("=", 1);
|
||||||
file.WriteAsUTF8(newvalue, slen(newvalue));
|
file.WriteAsUTF8(newvalue, slen(newvalue));
|
||||||
@ -970,7 +941,7 @@ void ConfigFile::SetKey(CTSTR lpSection, CTSTR lpKey, CTSTR newvalue)
|
|||||||
OSLeaveMutex(hHorribleThreadSafetyMutex);
|
OSLeaveMutex(hHorribleThreadSafetyMutex);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!file.WriteAsUTF8(&lpActualFileData[2], DWORD(lpTemp - lpActualFileData - 2)))
|
if (!file.WriteAsUTF8(&lpFileData[2], DWORD(lpTemp - lpFileData - 2)))
|
||||||
{
|
{
|
||||||
OSLeaveMutex(hHorribleThreadSafetyMutex);
|
OSLeaveMutex(hHorribleThreadSafetyMutex);
|
||||||
return;
|
return;
|
||||||
@ -1004,7 +975,7 @@ void ConfigFile::SetKey(CTSTR lpSection, CTSTR lpKey, CTSTR newvalue)
|
|||||||
|
|
||||||
XFile file(strFileName, XFILE_WRITE, XFILE_CREATEALWAYS);
|
XFile file(strFileName, XFILE_WRITE, XFILE_CREATEALWAYS);
|
||||||
file.Write("\xEF\xBB\xBF", 3);
|
file.Write("\xEF\xBB\xBF", 3);
|
||||||
file.WriteAsUTF8(&lpActualFileData[2], DWORD(lpSectionStart-lpActualFileData-2));
|
file.WriteAsUTF8(&lpFileData[2], DWORD(lpSectionStart-lpFileData-2));
|
||||||
file.WriteAsUTF8(lpKey, dwKeyNameSize);
|
file.WriteAsUTF8(lpKey, dwKeyNameSize);
|
||||||
file.Write("=", 1);
|
file.Write("=", 1);
|
||||||
file.WriteAsUTF8(newvalue, slen(newvalue));
|
file.WriteAsUTF8(newvalue, slen(newvalue));
|
||||||
@ -1023,7 +994,7 @@ void ConfigFile::Remove(CTSTR lpSection, CTSTR lpKey)
|
|||||||
OSEnterMutex(hHorribleThreadSafetyMutex);
|
OSEnterMutex(hHorribleThreadSafetyMutex);
|
||||||
assert(lpSection);
|
assert(lpSection);
|
||||||
assert(lpKey);
|
assert(lpKey);
|
||||||
TSTR lpTemp = lpActualFileData, lpEnd = &lpActualFileData[dwLength], lpSectionStart;
|
TSTR lpTemp = lpFileData, lpEnd = &lpFileData[dwLength], lpSectionStart;
|
||||||
DWORD dwSectionNameSize = slen(lpSection), dwKeyNameSize = slen(lpKey);
|
DWORD dwSectionNameSize = slen(lpSection), dwKeyNameSize = slen(lpKey);
|
||||||
BOOL bInSection = 0;
|
BOOL bInSection = 0;
|
||||||
|
|
||||||
@ -1062,7 +1033,7 @@ void ConfigFile::Remove(CTSTR lpSection, CTSTR lpKey)
|
|||||||
TSTR lpNextLine = schr(lpTemp, '\n')+1;
|
TSTR lpNextLine = schr(lpTemp, '\n')+1;
|
||||||
XFile file(strFileName, XFILE_WRITE, XFILE_CREATEALWAYS);
|
XFile file(strFileName, XFILE_WRITE, XFILE_CREATEALWAYS);
|
||||||
file.Write("\xEF\xBB\xBF", 3);
|
file.Write("\xEF\xBB\xBF", 3);
|
||||||
file.WriteAsUTF8(&lpActualFileData[2], DWORD(lpTemp-lpActualFileData-2));
|
file.WriteAsUTF8(&lpFileData[2], DWORD(lpTemp-lpFileData-2));
|
||||||
file.WriteAsUTF8(lpNextLine, slen(lpNextLine)-2);
|
file.WriteAsUTF8(lpNextLine, slen(lpNextLine)-2);
|
||||||
file.Close();
|
file.Close();
|
||||||
|
|
||||||
@ -1084,7 +1055,7 @@ void ConfigFile::AddKey(CTSTR lpSection, CTSTR lpKey, CTSTR newvalue)
|
|||||||
{
|
{
|
||||||
assert(lpSection);
|
assert(lpSection);
|
||||||
assert(lpKey);
|
assert(lpKey);
|
||||||
TSTR lpTemp = lpActualFileData, lpEnd = &lpActualFileData[dwLength], lpSectionStart;
|
TSTR lpTemp = lpFileData, lpEnd = &lpFileData[dwLength], lpSectionStart;
|
||||||
DWORD dwSectionNameSize = slen(lpSection), dwKeyNameSize = slen(lpKey);
|
DWORD dwSectionNameSize = slen(lpSection), dwKeyNameSize = slen(lpKey);
|
||||||
BOOL bInSection = 0;
|
BOOL bInSection = 0;
|
||||||
|
|
||||||
@ -1107,7 +1078,7 @@ void ConfigFile::AddKey(CTSTR lpSection, CTSTR lpKey, CTSTR newvalue)
|
|||||||
{
|
{
|
||||||
XFile file(strFileName, XFILE_WRITE, XFILE_CREATEALWAYS);
|
XFile file(strFileName, XFILE_WRITE, XFILE_CREATEALWAYS);
|
||||||
file.Write("\xEF\xBB\xBF", 3);
|
file.Write("\xEF\xBB\xBF", 3);
|
||||||
file.WriteAsUTF8(&lpActualFileData[2], dwLength-4);
|
file.WriteAsUTF8(&lpFileData[2], dwLength-4);
|
||||||
file.Write("\r\n[", 3);
|
file.Write("\r\n[", 3);
|
||||||
file.WriteAsUTF8(lpSection, dwSectionNameSize);
|
file.WriteAsUTF8(lpSection, dwSectionNameSize);
|
||||||
file.Write("]\r\n", 3);
|
file.Write("]\r\n", 3);
|
||||||
@ -1132,7 +1103,7 @@ void ConfigFile::AddKey(CTSTR lpSection, CTSTR lpKey, CTSTR newvalue)
|
|||||||
{
|
{
|
||||||
XFile file(strFileName, XFILE_WRITE, XFILE_CREATEALWAYS);
|
XFile file(strFileName, XFILE_WRITE, XFILE_CREATEALWAYS);
|
||||||
file.Write("\xEF\xBB\xBF", 3);
|
file.Write("\xEF\xBB\xBF", 3);
|
||||||
file.WriteAsUTF8(&lpActualFileData[2], DWORD(lpSectionStart-lpActualFileData-2));
|
file.WriteAsUTF8(&lpFileData[2], DWORD(lpSectionStart-lpFileData-2));
|
||||||
file.WriteAsUTF8(lpKey, dwKeyNameSize);
|
file.WriteAsUTF8(lpKey, dwKeyNameSize);
|
||||||
file.Write("=", 1);
|
file.Write("=", 1);
|
||||||
file.WriteAsUTF8(newvalue, slen(newvalue));
|
file.WriteAsUTF8(newvalue, slen(newvalue));
|
||||||
@ -1162,7 +1133,7 @@ void ConfigFile::AddKey(CTSTR lpSection, CTSTR lpKey, CTSTR newvalue)
|
|||||||
lpTemp = lpLastItem;
|
lpTemp = lpLastItem;
|
||||||
XFile file(strFileName, XFILE_WRITE, XFILE_CREATEALWAYS);
|
XFile file(strFileName, XFILE_WRITE, XFILE_CREATEALWAYS);
|
||||||
file.Write("\xEF\xBB\xBF", 3);
|
file.Write("\xEF\xBB\xBF", 3);
|
||||||
file.WriteAsUTF8(&lpActualFileData[2], DWORD(lpTemp-lpActualFileData-2));
|
file.WriteAsUTF8(&lpFileData[2], DWORD(lpTemp-lpFileData-2));
|
||||||
file.WriteAsUTF8(lpKey, dwKeyNameSize);
|
file.WriteAsUTF8(lpKey, dwKeyNameSize);
|
||||||
file.Write("=", 1);
|
file.Write("=", 1);
|
||||||
file.WriteAsUTF8(newvalue, slen(newvalue));
|
file.WriteAsUTF8(newvalue, slen(newvalue));
|
||||||
@ -1183,7 +1154,7 @@ void ConfigFile::AddKey(CTSTR lpSection, CTSTR lpKey, CTSTR newvalue)
|
|||||||
|
|
||||||
XFile file(strFileName, XFILE_WRITE, XFILE_CREATEALWAYS);
|
XFile file(strFileName, XFILE_WRITE, XFILE_CREATEALWAYS);
|
||||||
file.Write("\xEF\xBB\xBF", 3);
|
file.Write("\xEF\xBB\xBF", 3);
|
||||||
file.WriteAsUTF8(&lpActualFileData[2], DWORD(lpSectionStart-lpActualFileData-2));
|
file.WriteAsUTF8(&lpFileData[2], DWORD(lpSectionStart-lpFileData-2));
|
||||||
file.WriteAsUTF8(lpKey, dwKeyNameSize);
|
file.WriteAsUTF8(lpKey, dwKeyNameSize);
|
||||||
file.Write("=", 1);
|
file.Write("=", 1);
|
||||||
file.WriteAsUTF8(newvalue, slen(newvalue));
|
file.WriteAsUTF8(newvalue, slen(newvalue));
|
||||||
|
@ -39,7 +39,7 @@ struct ConfigSection
|
|||||||
class BASE_EXPORT ConfigFile
|
class BASE_EXPORT ConfigFile
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ConfigFile() : bOpen(0), strFileName(), lpFileData(NULL), dwLength(0) {}
|
ConfigFile() : bOpen(0), strFileName(), lpFileData(NULL), dwLength(0) { hHorribleThreadSafetyMutex = OSCreateMutex(); }
|
||||||
~ConfigFile() {Close();}
|
~ConfigFile() {Close();}
|
||||||
|
|
||||||
BOOL Create(CTSTR lpConfigFile);
|
BOOL Create(CTSTR lpConfigFile);
|
||||||
@ -105,4 +105,5 @@ private:
|
|||||||
String strFileName;
|
String strFileName;
|
||||||
TSTR lpFileData;
|
TSTR lpFileData;
|
||||||
DWORD dwLength;
|
DWORD dwLength;
|
||||||
|
HANDLE hHorribleThreadSafetyMutex;
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user