diff --git a/source/core/FileSystems.h b/source/core/FileSystems.h index 543a18a6e..d46d2796e 100644 --- a/source/core/FileSystems.h +++ b/source/core/FileSystems.h @@ -91,10 +91,10 @@ class TCustomFileSystem TRemoteFile *& File) = 0; virtual void __fastcall ReadSymlink(TRemoteFile * SymLinkFile, TRemoteFile *& File) = 0; - virtual void __fastcall RenameFile(const UnicodeString FileName, const TRemoteFile * File, - const UnicodeString NewName) = 0; - virtual void __fastcall CopyFile(const UnicodeString FileName, const TRemoteFile * File, - const UnicodeString NewName) = 0; + virtual void __fastcall RenameFile( + const UnicodeString & FileName, const TRemoteFile * File, const UnicodeString & NewName, bool Overwrite) = 0; + virtual void __fastcall CopyFile( + const UnicodeString & FileName, const TRemoteFile * File, const UnicodeString & NewName, bool Overwrite) = 0; virtual TStrings * __fastcall GetFixedPaths() = 0; virtual void __fastcall SpaceAvailable(const UnicodeString Path, TSpaceAvailable & ASpaceAvailable) = 0; diff --git a/source/core/FtpFileSystem.cpp b/source/core/FtpFileSystem.cpp index 7887616aa..f05febcd9 100644 --- a/source/core/FtpFileSystem.cpp +++ b/source/core/FtpFileSystem.cpp @@ -2519,8 +2519,8 @@ void __fastcall TFTPFileSystem::ReadSymlink(TRemoteFile * SymlinkFile, } } //--------------------------------------------------------------------------- -void __fastcall TFTPFileSystem::RenameFile(const UnicodeString AFileName, const TRemoteFile * /*File*/, - const UnicodeString ANewName) +void __fastcall TFTPFileSystem::RenameFile( + const UnicodeString & AFileName, const TRemoteFile *, const UnicodeString & ANewName, bool DebugUsedArg(Overwrite)) { UnicodeString FileName = AbsolutePath(AFileName, false); UnicodeString NewName = AbsolutePath(ANewName, false); @@ -2541,8 +2541,8 @@ void __fastcall TFTPFileSystem::RenameFile(const UnicodeString AFileName, const } } //--------------------------------------------------------------------------- -void __fastcall TFTPFileSystem::CopyFile(const UnicodeString FileName, const TRemoteFile * /*File*/, - const UnicodeString NewName) +void __fastcall TFTPFileSystem::CopyFile( + const UnicodeString & FileName, const TRemoteFile *, const UnicodeString & NewName, bool DebugUsedArg(Overwrite)) { DebugAssert(SupportsSiteCommand(CopySiteCommand)); EnsureLocation(); diff --git a/source/core/FtpFileSystem.h b/source/core/FtpFileSystem.h index 0c6f5c5e2..942854766 100644 --- a/source/core/FtpFileSystem.h +++ b/source/core/FtpFileSystem.h @@ -80,10 +80,10 @@ friend class TFileListHelper; TRemoteFile *& File); virtual void __fastcall ReadSymlink(TRemoteFile * SymlinkFile, TRemoteFile *& File); - virtual void __fastcall RenameFile(const UnicodeString FileName, const TRemoteFile * File, - const UnicodeString NewName); - virtual void __fastcall CopyFile(const UnicodeString FileName, const TRemoteFile * File, - const UnicodeString NewName); + virtual void __fastcall RenameFile( + const UnicodeString & FileName, const TRemoteFile * File, const UnicodeString & NewName, bool Overwrite); + virtual void __fastcall CopyFile( + const UnicodeString & FileName, const TRemoteFile * File, const UnicodeString & NewName, bool Overwrite); virtual TStrings * __fastcall GetFixedPaths(); virtual void __fastcall SpaceAvailable(const UnicodeString Path, TSpaceAvailable & ASpaceAvailable); diff --git a/source/core/S3FileSystem.cpp b/source/core/S3FileSystem.cpp index 1a39d921d..c4397c02f 100644 --- a/source/core/S3FileSystem.cpp +++ b/source/core/S3FileSystem.cpp @@ -1356,21 +1356,21 @@ void __fastcall TS3FileSystem::DeleteFile(const UnicodeString AFileName, } } //--------------------------------------------------------------------------- -void __fastcall TS3FileSystem::RenameFile(const UnicodeString FileName, const TRemoteFile * File, - const UnicodeString NewName) +void __fastcall TS3FileSystem::RenameFile( + const UnicodeString & FileName, const TRemoteFile * File, const UnicodeString & NewName, bool Overwrite) { if (DebugAlwaysTrue(File != NULL) && File->IsDirectory) { throw Exception(LoadStr(NOTSUPPORTED)); } - CopyFile(FileName, File, NewName); + CopyFile(FileName, File, NewName, Overwrite); TRmSessionAction DummyAction(FTerminal->ActionLog, FileName); DeleteFile(FileName, File, dfForceDelete, DummyAction); DummyAction.Cancel(); } //--------------------------------------------------------------------------- -void __fastcall TS3FileSystem::CopyFile(const UnicodeString AFileName, const TRemoteFile * File, - const UnicodeString ANewName) +void __fastcall TS3FileSystem::CopyFile( + const UnicodeString & AFileName, const TRemoteFile * File, const UnicodeString & ANewName, bool DebugUsedArg(Overwrite)) { if (DebugAlwaysTrue(File != NULL) && File->IsDirectory) { diff --git a/source/core/S3FileSystem.h b/source/core/S3FileSystem.h index 4f47f38bc..8a1ce60be 100644 --- a/source/core/S3FileSystem.h +++ b/source/core/S3FileSystem.h @@ -92,10 +92,10 @@ class TS3FileSystem : public TCustomFileSystem TRemoteFile *& File); virtual void __fastcall ReadSymlink(TRemoteFile * SymLinkFile, TRemoteFile *& File); - virtual void __fastcall RenameFile(const UnicodeString FileName, const TRemoteFile * File, - const UnicodeString NewName); - virtual void __fastcall CopyFile(const UnicodeString FileName, const TRemoteFile * File, - const UnicodeString NewName); + virtual void __fastcall RenameFile( + const UnicodeString & FileName, const TRemoteFile * File, const UnicodeString & NewName, bool Overwrite); + virtual void __fastcall CopyFile( + const UnicodeString & FileName, const TRemoteFile * File, const UnicodeString & NewName, bool Overwrite); virtual TStrings * __fastcall GetFixedPaths(); virtual void __fastcall SpaceAvailable(const UnicodeString Path, TSpaceAvailable & ASpaceAvailable); diff --git a/source/core/ScpFileSystem.cpp b/source/core/ScpFileSystem.cpp index bdaeab227..e187be6c3 100644 --- a/source/core/ScpFileSystem.cpp +++ b/source/core/ScpFileSystem.cpp @@ -1172,14 +1172,14 @@ void __fastcall TSCPFileSystem::DeleteFile(const UnicodeString FileName, ExecCommand(fsDeleteFile, ARRAYOFCONST((DelimitStr(FileName)))); } //--------------------------------------------------------------------------- -void __fastcall TSCPFileSystem::RenameFile(const UnicodeString FileName, const TRemoteFile * /*File*/, - const UnicodeString NewName) +void __fastcall TSCPFileSystem::RenameFile( + const UnicodeString & FileName, const TRemoteFile *, const UnicodeString & NewName, bool DebugUsedArg(Overwrite)) { ExecCommand(fsRenameFile, ARRAYOFCONST((DelimitStr(FileName), DelimitStr(NewName)))); } //--------------------------------------------------------------------------- -void __fastcall TSCPFileSystem::CopyFile(const UnicodeString FileName, const TRemoteFile * /*File*/, - const UnicodeString NewName) +void __fastcall TSCPFileSystem::CopyFile( + const UnicodeString & FileName, const TRemoteFile *, const UnicodeString & NewName, bool DebugUsedArg(Overwrite)) { UnicodeString DelimitedFileName = DelimitStr(FileName); UnicodeString DelimitedNewName = DelimitStr(NewName); diff --git a/source/core/ScpFileSystem.h b/source/core/ScpFileSystem.h index 17a8f8563..12f01dd88 100644 --- a/source/core/ScpFileSystem.h +++ b/source/core/ScpFileSystem.h @@ -68,10 +68,10 @@ class TSCPFileSystem : public TCustomFileSystem TRemoteFile *& File); virtual void __fastcall ReadSymlink(TRemoteFile * SymlinkFile, TRemoteFile *& File); - virtual void __fastcall RenameFile(const UnicodeString FileName, const TRemoteFile * File, - const UnicodeString NewName); - virtual void __fastcall CopyFile(const UnicodeString FileName, const TRemoteFile * File, - const UnicodeString NewName); + virtual void __fastcall RenameFile( + const UnicodeString & FileName, const TRemoteFile * File, const UnicodeString & NewName, bool Overwrite); + virtual void __fastcall CopyFile( + const UnicodeString & FileName, const TRemoteFile * File, const UnicodeString & NewName, bool Overwrite); virtual TStrings * __fastcall GetFixedPaths(); virtual void __fastcall SpaceAvailable(const UnicodeString Path, TSpaceAvailable & ASpaceAvailable); diff --git a/source/core/SftpFileSystem.cpp b/source/core/SftpFileSystem.cpp index a29fa9be8..bf1e9b1c1 100644 --- a/source/core/SftpFileSystem.cpp +++ b/source/core/SftpFileSystem.cpp @@ -3842,8 +3842,8 @@ void __fastcall TSFTPFileSystem::DeleteFile(const UnicodeString FileName, DoDeleteFile(FileName, Type); } //--------------------------------------------------------------------------- -void __fastcall TSFTPFileSystem::RenameFile(const UnicodeString FileName, const TRemoteFile * /*File*/, - const UnicodeString NewName) +void __fastcall TSFTPFileSystem::RenameFile( + const UnicodeString & FileName, const TRemoteFile *, const UnicodeString & NewName, bool DebugUsedArg(Overwrite)) { TSFTPPacket Packet(SSH_FXP_RENAME); UnicodeString RealName = LocalCanonify(FileName); @@ -3878,7 +3878,7 @@ void TSFTPFileSystem::DoCloseRemoteIfOpened(const RawByteString & Handle) } //--------------------------------------------------------------------------- void __fastcall TSFTPFileSystem::CopyFile( - const UnicodeString FileName, const TRemoteFile * File, const UnicodeString NewName) + const UnicodeString & FileName, const TRemoteFile * File, const UnicodeString & NewName, bool DebugUsedArg(Overwrite)) { UnicodeString FileNameCanonical = Canonify(FileName); bool Encrypted = FTerminal->IsFileEncrypted(FileNameCanonical); @@ -4897,7 +4897,7 @@ void __fastcall TSFTPFileSystem::Source( // on VShell it failed FILE_OPERATION_LOOP_BEGIN { - RenameFile(OpenParams.RemoteFileName, NULL, DestFileName); + RenameFile(OpenParams.RemoteFileName, NULL, DestFileName, false); } FILE_OPERATION_LOOP_END_CUSTOM( FMTLOAD(RENAME_AFTER_RESUME_ERROR, diff --git a/source/core/SftpFileSystem.h b/source/core/SftpFileSystem.h index aa239f327..ed521fe14 100644 --- a/source/core/SftpFileSystem.h +++ b/source/core/SftpFileSystem.h @@ -83,10 +83,10 @@ friend class TSFTPBusy; TRemoteFile *& File); virtual void __fastcall ReadSymlink(TRemoteFile * SymlinkFile, TRemoteFile *& File); - virtual void __fastcall RenameFile(const UnicodeString FileName, const TRemoteFile * File, - const UnicodeString NewName); - virtual void __fastcall CopyFile(const UnicodeString FileName, const TRemoteFile * File, - const UnicodeString NewName); + virtual void __fastcall RenameFile( + const UnicodeString & FileName, const TRemoteFile * File, const UnicodeString & NewName, bool Overwrite); + virtual void __fastcall CopyFile( + const UnicodeString & FileName, const TRemoteFile * File, const UnicodeString & NewName, bool Overwrite); virtual TStrings * __fastcall GetFixedPaths(); virtual void __fastcall SpaceAvailable(const UnicodeString Path, TSpaceAvailable & ASpaceAvailable); diff --git a/source/core/Terminal.cpp b/source/core/Terminal.cpp index edc2dcea7..57cfbb33d 100644 --- a/source/core/Terminal.cpp +++ b/source/core/Terminal.cpp @@ -4943,7 +4943,7 @@ bool __fastcall TTerminal::DoRenameFile( try { DebugAssert(FFileSystem); - FFileSystem->RenameFile(FileName, File, NewName); + FFileSystem->RenameFile(FileName, File, NewName, !DontOverwrite); } catch(Exception & E) { @@ -5044,8 +5044,8 @@ bool __fastcall TTerminal::MoveFiles( return Result; } //--------------------------------------------------------------------------- -void __fastcall TTerminal::DoCopyFile(const UnicodeString FileName, const TRemoteFile * File, - const UnicodeString NewName) +void __fastcall TTerminal::DoCopyFile( + const UnicodeString & FileName, const TRemoteFile * File, const UnicodeString & NewName, bool DontOverwrite) { TRetryOperationLoop RetryLoop(this); do @@ -5066,7 +5066,7 @@ void __fastcall TTerminal::DoCopyFile(const UnicodeString FileName, const TRemot { FileSystem = GetFileSystemForCapability(fcRemoteCopy); } - FileSystem->CopyFile(FileName, File, NewName); + FileSystem->CopyFile(FileName, File, NewName, !DontOverwrite); } catch(Exception & E) { @@ -5085,7 +5085,7 @@ void __fastcall TTerminal::CopyFile(const UnicodeString FileName, UnicodeString NewName = UnixIncludeTrailingBackslash(Params.Target) + MaskFileName(UnixExtractFileName(FileName), Params.FileMask); LogEvent(FORMAT(L"Copying file \"%s\" to \"%s\".", (FileName, NewName))); - DoCopyFile(FileName, File, NewName); + DoCopyFile(FileName, File, NewName, Params.DontOverwrite); ReactOnCommand(fsCopyFile); } //--------------------------------------------------------------------------- @@ -5095,7 +5095,7 @@ bool __fastcall TTerminal::CopyFiles(TStrings * FileList, const UnicodeString Ta TMoveFileParams Params; Params.Target = Target; Params.FileMask = FileMask; - Params.DontOverwrite = false; // not used + Params.DontOverwrite = true; // not used DirectoryModified(Target, true); return ProcessFiles(FileList, foRemoteCopy, CopyFile, &Params); } diff --git a/source/core/Terminal.h b/source/core/Terminal.h index d7c444c21..665c1f15d 100644 --- a/source/core/Terminal.h +++ b/source/core/Terminal.h @@ -282,7 +282,8 @@ friend class TParallelOperation; bool __fastcall DoRenameFile( const UnicodeString & FileName, const TRemoteFile * File, const UnicodeString & NewName, bool Move, bool DontOverwrite); bool __fastcall DoMoveFile(const UnicodeString & FileName, const TRemoteFile * File, /*const TMoveFileParams*/ void * Param); - void __fastcall DoCopyFile(const UnicodeString FileName, const TRemoteFile * File, const UnicodeString NewName); + void __fastcall DoCopyFile( + const UnicodeString & FileName, const TRemoteFile * File, const UnicodeString & NewName, bool DontOverwrite); void __fastcall DoChangeFileProperties(const UnicodeString FileName, const TRemoteFile * File, const TRemoteProperties * Properties); void __fastcall DoChangeDirectory(); diff --git a/source/core/WebDAVFileSystem.cpp b/source/core/WebDAVFileSystem.cpp index 0f2ff2bb4..4cbeed302 100644 --- a/source/core/WebDAVFileSystem.cpp +++ b/source/core/WebDAVFileSystem.cpp @@ -1096,48 +1096,46 @@ void __fastcall TWebDAVFileSystem::DeleteFile(const UnicodeString FileName, DiscardLock(Path); } //--------------------------------------------------------------------------- -int __fastcall TWebDAVFileSystem::RenameFileInternal(const UnicodeString & FileName, - const UnicodeString & NewName) +int __fastcall TWebDAVFileSystem::RenameFileInternal( + const UnicodeString & FileName, const UnicodeString & NewName, bool Overwrite) { - const int Overwrite = 1; return ne_move(FSessionContext->NeonSession, Overwrite, PathToNeon(FileName), PathToNeon(NewName)); } //--------------------------------------------------------------------------- -void __fastcall TWebDAVFileSystem::RenameFile(const UnicodeString FileName, const TRemoteFile * /*File*/, - const UnicodeString NewName) +void __fastcall TWebDAVFileSystem::RenameFile( + const UnicodeString & FileName, const TRemoteFile *, const UnicodeString & NewName, bool Overwrite) { ClearNeonError(); TOperationVisualizer Visualizer(FTerminal->UseBusyCursor); UnicodeString Path = FileName; - int NeonStatus = RenameFileInternal(Path, NewName); + int NeonStatus = RenameFileInternal(Path, NewName, Overwrite); if (IsValidRedirect(NeonStatus, Path)) { - NeonStatus = RenameFileInternal(Path, NewName); + NeonStatus = RenameFileInternal(Path, NewName, Overwrite); } CheckStatus(NeonStatus); // See a comment in DeleteFile DiscardLock(PathToNeon(Path)); } //--------------------------------------------------------------------------- -int __fastcall TWebDAVFileSystem::CopyFileInternal(const UnicodeString & FileName, - const UnicodeString & NewName) +int __fastcall TWebDAVFileSystem::CopyFileInternal( + const UnicodeString & FileName, const UnicodeString & NewName, bool Overwrite) { - // 0 = no overwrite - return ne_copy(FSessionContext->NeonSession, 0, NE_DEPTH_INFINITE, PathToNeon(FileName), PathToNeon(NewName)); + return ne_copy(FSessionContext->NeonSession, Overwrite, NE_DEPTH_INFINITE, PathToNeon(FileName), PathToNeon(NewName)); } //--------------------------------------------------------------------------- -void __fastcall TWebDAVFileSystem::CopyFile(const UnicodeString FileName, const TRemoteFile * /*File*/, - const UnicodeString NewName) +void __fastcall TWebDAVFileSystem::CopyFile( + const UnicodeString & FileName, const TRemoteFile *, const UnicodeString & NewName, bool Overwrite) { ClearNeonError(); TOperationVisualizer Visualizer(FTerminal->UseBusyCursor); UnicodeString Path = FileName; - int NeonStatus = CopyFileInternal(Path, NewName); + int NeonStatus = CopyFileInternal(Path, NewName, Overwrite); if (IsValidRedirect(NeonStatus, Path)) { - NeonStatus = CopyFileInternal(Path, NewName); + NeonStatus = CopyFileInternal(Path, NewName, Overwrite); } CheckStatus(NeonStatus); } diff --git a/source/core/WebDAVFileSystem.h b/source/core/WebDAVFileSystem.h index fe2a85f78..70ab044db 100644 --- a/source/core/WebDAVFileSystem.h +++ b/source/core/WebDAVFileSystem.h @@ -71,10 +71,10 @@ class TWebDAVFileSystem : public TCustomFileSystem TRemoteFile *& File); virtual void __fastcall ReadSymlink(TRemoteFile * SymlinkFile, TRemoteFile *& File); - virtual void __fastcall RenameFile(const UnicodeString FileName, const TRemoteFile * File, - const UnicodeString NewName); - virtual void __fastcall CopyFile(const UnicodeString FileName, const TRemoteFile * File, - const UnicodeString NewName); + virtual void __fastcall RenameFile( + const UnicodeString & FileName, const TRemoteFile * File, const UnicodeString & NewName, bool Overwrite); + virtual void __fastcall CopyFile( + const UnicodeString & FileName, const TRemoteFile * File, const UnicodeString & NewName, bool Overwrite); virtual TStrings * __fastcall GetFixedPaths(); virtual void __fastcall SpaceAvailable(const UnicodeString Path, TSpaceAvailable & ASpaceAvailable); @@ -189,8 +189,8 @@ class TWebDAVFileSystem : public TCustomFileSystem UnicodeString __fastcall GetRedirectUrl(); UnicodeString __fastcall ParsePathFromUrl(const UnicodeString & Url); int __fastcall ReadDirectoryInternal(const UnicodeString & Path, TRemoteFileList * FileList); - int __fastcall RenameFileInternal(const UnicodeString & FileName, const UnicodeString & NewName); - int __fastcall CopyFileInternal(const UnicodeString & FileName, const UnicodeString & NewName); + int __fastcall RenameFileInternal(const UnicodeString & FileName, const UnicodeString & NewName, bool Overwrite); + int __fastcall CopyFileInternal(const UnicodeString & FileName, const UnicodeString & NewName, bool Overwrite); bool __fastcall IsValidRedirect(int NeonStatus, UnicodeString & Path); UnicodeString __fastcall DirectoryPath(UnicodeString Path); UnicodeString __fastcall FilePath(const TRemoteFile * File);