1
0
mirror of https://github.com/winscp/winscp.git synced 2026-10-24 02:28:55 +03:00

Bug 2163: Workaround for using /ini=nul on systems when reading "nul" file fails

https://winscp.net/tracker/2163

Source commit: 2a222baa93187e05a2b7c286015bb1ede9146fa1
This commit is contained in:
Martin Prikryl
2023-02-02 16:23:46 +00:00
parent 4309fedbae
commit 71ea2a977a
3 changed files with 11 additions and 2 deletions

View File

@@ -192,7 +192,7 @@ THierarchicalStorage * TConfiguration::CreateScpStorage(bool & SessionList)
}
else if (Storage == stNul)
{
Result = TIniFileStorage::CreateFromPath(INI_NUL);
Result = TIniFileStorage::CreateNul();
}
else
{

View File

@@ -1626,6 +1626,14 @@ TIniFileStorage * __fastcall TIniFileStorage::CreateFromPath(const UnicodeString
return new TIniFileStorage(AStorage, IniFile);
}
//---------------------------------------------------------------------------
TIniFileStorage * __fastcall TIniFileStorage::CreateNul()
{
// Before we passed "nul", but we have report of a system, where opening "nul" file fails.
// Passing an empty string is even more efficient, as it does not even try to read the file.
TMemIniFile * IniFile = new TMemIniFile(EmptyStr);
return new TIniFileStorage(INI_NUL, IniFile);
}
//---------------------------------------------------------------------------
__fastcall TIniFileStorage::TIniFileStorage(const UnicodeString & AStorage, TCustomIniFile * IniFile):
TCustomIniFileStorage(AStorage, IniFile)
{
@@ -1640,7 +1648,7 @@ void __fastcall TIniFileStorage::Flush()
{
FMasterStorage->Flush();
}
if (FOriginal != NULL)
if ((FOriginal != NULL) && !FIniFile->FileName.IsEmpty())
{
std::unique_ptr<TStrings> Strings(new TStringList);
std::unique_ptr<TStrings> Original(FOriginal);

View File

@@ -259,6 +259,7 @@ class TIniFileStorage : public TCustomIniFileStorage
{
public:
static TIniFileStorage * __fastcall CreateFromPath(const UnicodeString & AStorage);
static TIniFileStorage * __fastcall CreateNul();
virtual __fastcall ~TIniFileStorage();
virtual void __fastcall Flush();