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:
@@ -192,7 +192,7 @@ THierarchicalStorage * TConfiguration::CreateScpStorage(bool & SessionList)
|
||||
}
|
||||
else if (Storage == stNul)
|
||||
{
|
||||
Result = TIniFileStorage::CreateFromPath(INI_NUL);
|
||||
Result = TIniFileStorage::CreateNul();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user