|
@@ -1866,6 +1866,8 @@ struct TOpenRemoteFileParams
|
|
|
TOverwriteFileParams * FileParams;
|
|
TOverwriteFileParams * FileParams;
|
|
|
bool Confirmed;
|
|
bool Confirmed;
|
|
|
bool DontRecycle;
|
|
bool DontRecycle;
|
|
|
|
|
+ bool Recycled;
|
|
|
|
|
+ TRights RecycledRights;
|
|
|
};
|
|
};
|
|
|
//===========================================================================
|
|
//===========================================================================
|
|
|
__fastcall TSFTPFileSystem::TSFTPFileSystem(TTerminal * ATerminal,
|
|
__fastcall TSFTPFileSystem::TSFTPFileSystem(TTerminal * ATerminal,
|
|
@@ -4633,6 +4635,7 @@ void __fastcall TSFTPFileSystem::Source(
|
|
|
OpenParams.FileParams = &FileParams;
|
|
OpenParams.FileParams = &FileParams;
|
|
|
OpenParams.Confirmed = (CopyParam->OnTransferIn != NULL);
|
|
OpenParams.Confirmed = (CopyParam->OnTransferIn != NULL);
|
|
|
OpenParams.DontRecycle = false;
|
|
OpenParams.DontRecycle = false;
|
|
|
|
|
+ OpenParams.Recycled = false;
|
|
|
|
|
|
|
|
FTerminal->LogEvent(0, L"Opening remote file.");
|
|
FTerminal->LogEvent(0, L"Opening remote file.");
|
|
|
FTerminal->FileOperationLoop(SFTPOpenRemote, OperationProgress, folAllowSkip,
|
|
FTerminal->FileOperationLoop(SFTPOpenRemote, OperationProgress, folAllowSkip,
|
|
@@ -4656,7 +4659,7 @@ void __fastcall TSFTPFileSystem::Source(
|
|
|
__int64 DestWriteOffset = 0;
|
|
__int64 DestWriteOffset = 0;
|
|
|
TSFTPPacket CloseRequest;
|
|
TSFTPPacket CloseRequest;
|
|
|
bool PreserveRights = CopyParam->PreserveRights && (CopyParam->OnTransferIn == NULL);
|
|
bool PreserveRights = CopyParam->PreserveRights && (CopyParam->OnTransferIn == NULL);
|
|
|
- bool PreserveExistingRights = DoResume && DestFileExists;
|
|
|
|
|
|
|
+ bool PreserveExistingRights = (DoResume && DestFileExists) || OpenParams.Recycled;
|
|
|
bool SetRights = (PreserveExistingRights || PreserveRights);
|
|
bool SetRights = (PreserveExistingRights || PreserveRights);
|
|
|
bool PreserveTime = CopyParam->PreserveTime && (CopyParam->OnTransferIn == NULL);
|
|
bool PreserveTime = CopyParam->PreserveTime && (CopyParam->OnTransferIn == NULL);
|
|
|
bool SetProperties = (PreserveTime || SetRights);
|
|
bool SetProperties = (PreserveTime || SetRights);
|
|
@@ -4672,7 +4675,14 @@ void __fastcall TSFTPFileSystem::Source(
|
|
|
}
|
|
}
|
|
|
else if (PreserveExistingRights)
|
|
else if (PreserveExistingRights)
|
|
|
{
|
|
{
|
|
|
- Rights = DestRights;
|
|
|
|
|
|
|
+ if (DestFileExists)
|
|
|
|
|
+ {
|
|
|
|
|
+ Rights = DestRights;
|
|
|
|
|
+ }
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ Rights = OpenParams.RecycledRights;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
else
|
|
else
|
|
|
{
|
|
{
|
|
@@ -5100,6 +5110,11 @@ int __fastcall TSFTPFileSystem::SFTPOpenRemote(void * AOpenParams, void * /*Para
|
|
|
// Allow normal overwrite
|
|
// Allow normal overwrite
|
|
|
OpenParams->DontRecycle = true;
|
|
OpenParams->DontRecycle = true;
|
|
|
}
|
|
}
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ OpenParams->Recycled = true;
|
|
|
|
|
+ OpenParams->RecycledRights = *File->Rights;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|