Browse Source

Factoring out TSearchRecChecked::GetFilePath()

Source commit: 520a6513e98fa51aaf4bf4609dd5f187291ab035
Martin Prikryl 2 years ago
parent
commit
c9390ec2f8

+ 11 - 4
source/core/Common.cpp

@@ -9,6 +9,7 @@
 #include "Interface.h"
 #include <StrUtils.hpp>
 #include <DateUtils.hpp>
+#include <System.IOUtils.hpp>
 #include <math.h>
 #include <shlobj.h>
 #include <limits>
@@ -28,6 +29,7 @@
 const wchar_t * DSTModeNames = L"Win;Unix;Keep";
 //---------------------------------------------------------------------------
 //---------------------------------------------------------------------------
+const UnicodeString AnyMask = L"*.*";
 const wchar_t EngShortMonthNames[12][4] =
   {L"Jan", L"Feb", L"Mar", L"Apr", L"May", L"Jun",
    L"Jul", L"Aug", L"Sep", L"Oct", L"Nov", L"Dec"};
@@ -1486,6 +1488,11 @@ bool TSearchRecSmart::IsHidden() const
   return FLAGSET(Attr, faHidden);
 }
 //---------------------------------------------------------------------------
+UnicodeString TSearchRecChecked::GetFilePath() const
+{
+  return TPath::Combine(Dir, Name);
+}
+//---------------------------------------------------------------------------
 TSearchRecOwned::~TSearchRecOwned()
 {
   if (Opened)
@@ -1514,6 +1521,7 @@ int __fastcall FindCheck(int Result, const UnicodeString & Path)
 int __fastcall FindFirstUnchecked(const UnicodeString & Path, int Attr, TSearchRecChecked & F)
 {
   F.Path = Path;
+  F.Dir = ExtractFilePath(Path);
   int Result = FindFirst(ApiPath(Path), Attr, F);
   F.Opened = (Result == 0);
   return Result;
@@ -1584,15 +1592,14 @@ void __fastcall ProcessLocalDirectory(UnicodeString DirName,
     FindAttrs = faReadOnly | faHidden | faSysFile | faDirectory | faArchive;
   }
 
-  DirName = IncludeTrailingBackslash(DirName);
   TSearchRecOwned SearchRec;
-  if (FindFirstChecked(DirName + L"*.*", FindAttrs, SearchRec) == 0)
+  if (FindFirstChecked(TPath::Combine(DirName, AnyMask), FindAttrs, SearchRec) == 0)
   {
     do
     {
       if (SearchRec.IsRealFile())
       {
-        CallBackFunc(DirName + SearchRec.Name, SearchRec, Param);
+        CallBackFunc(SearchRec.GetFilePath(), SearchRec, Param);
       }
 
     } while (FindNextChecked(SearchRec) == 0);
@@ -2545,7 +2552,7 @@ static bool __fastcall DoRecursiveDeleteFile(
           {
             do
             {
-              UnicodeString FileName2 = FileName + L"\\" + SearchRec.Name;
+              UnicodeString FileName2 = SearchRec.GetFilePath();
               if (SearchRec.IsDirectory())
               {
                 if (SearchRec.IsRealFile())

+ 3 - 0
source/core/Common.h

@@ -21,6 +21,7 @@
 #define PARENTDIRECTORY L".."
 #define THISDIRECTORY L"."
 //---------------------------------------------------------------------------
+extern const UnicodeString AnyMask;
 extern const wchar_t EngShortMonthNames[12][4];
 extern const char Bom[3];
 extern const wchar_t TokenPrefix;
@@ -217,7 +218,9 @@ void CopySearchRec(const TSearchRec & Source, TSearchRec & Dest);
 struct TSearchRecChecked : public TSearchRecSmart
 {
   UnicodeString Path;
+  UnicodeString Dir;
   bool Opened;
+  UnicodeString GetFilePath() const;
 };
 struct TSearchRecOwned : public TSearchRecChecked
 {

+ 0 - 1
source/core/FileMasks.cpp

@@ -16,7 +16,6 @@ UnicodeString FileMasksDelimiters = L";,";
 static UnicodeString AllFileMasksDelimiters = FileMasksDelimiters + IncludeExcludeFileMasksDelimiter;
 static UnicodeString DirectoryMaskDelimiters = L"/\\";
 static UnicodeString FileMasksDelimiterStr = UnicodeString(FileMasksDelimiters[1]) + L' ';
-UnicodeString AnyMask = L"*.*";
 static UnicodeString MaskSymbols = L"?*[";
 //---------------------------------------------------------------------------
 __fastcall EFileMasksException::EFileMasksException(

+ 0 - 1
source/core/FileMasks.h

@@ -251,6 +251,5 @@ private:
 //---------------------------------------------------------------------------
 typedef TFileCustomCommand TRemoteCustomCommand;
 extern UnicodeString FileMasksDelimiters;
-extern UnicodeString AnyMask;
 //---------------------------------------------------------------------------
 #endif

+ 1 - 1
source/core/ScpFileSystem.cpp

@@ -2200,7 +2200,7 @@ void __fastcall TSCPFileSystem::SCPDirectorySource(const UnicodeString Directory
 
     while (FindOK && !OperationProgress->Cancel)
     {
-      UnicodeString FileName = IncludeTrailingBackslash(DirectoryName) + SearchRec.Name;
+      UnicodeString FileName = SearchRec.GetFilePath();
       try
       {
         if (SearchRec.IsRealFile())

+ 1 - 2
source/core/Script.cpp

@@ -760,12 +760,11 @@ TStrings * __fastcall TScript::CreateLocalFileList(TScriptProcParams * Parameter
         bool AnyFound = false;
         if (FindFirstUnchecked(FileName, FindAttrs, SearchRec) == 0)
         {
-          UnicodeString Directory = ExtractFilePath(FileName);
           do
           {
             if (SearchRec.IsRealFile())
             {
-              UnicodeString FileName = Directory + SearchRec.Name;
+              UnicodeString FileName = SearchRec.GetFilePath();
               TLocalFile * LocalFile = new TLocalFile;
               CopySearchRec(SearchRec, LocalFile->SearchRec);
               Result->AddObject(FileName, LocalFile);

+ 3 - 3
source/core/Terminal.cpp

@@ -5818,7 +5818,7 @@ bool __fastcall TTerminal::IsEmptyLocalDirectory(
   {
     do
     {
-      UnicodeString FullLocalFileName = IncludeTrailingBackslash(Path) + SearchRec.Name;
+      UnicodeString FullLocalFileName = SearchRec.GetFilePath();
       if (SearchRec.IsRealFile() &&
           DoAllowLocalFileTransfer(FullLocalFileName, SearchRec, CopyParam, true))
       {
@@ -5885,7 +5885,7 @@ void __fastcall TTerminal::DoSynchronizeCollectDirectory(const UnicodeString Loc
       do
       {
         UnicodeString FileName = SearchRec.Name;
-        UnicodeString FullLocalFileName = Data.LocalDirectory + FileName;
+        UnicodeString FullLocalFileName = SearchRec.GetFilePath();
         UnicodeString RemoteFileName = ChangeFileName(CopyParam, FileName, osLocal, false);
         if (SearchRec.IsRealFile() &&
             DoAllowLocalFileTransfer(FullLocalFileName, SearchRec, CopyParam, true) &&
@@ -7297,7 +7297,7 @@ void __fastcall TTerminal::DirectorySource(
     bool FindOK = LocalFindFirstLoop(DirectoryName + L"*.*", SearchRec);
     while (FindOK && !OperationProgress->Cancel)
     {
-      UnicodeString FileName = DirectoryName + SearchRec.Name;
+      UnicodeString FileName = SearchRec.GetFilePath();
       try
       {
         if (SearchRec.IsRealFile())

+ 2 - 3
source/windows/WinConfiguration.cpp

@@ -1369,7 +1369,7 @@ void __fastcall TWinConfiguration::DoLoadExtensionList(
 
           try
           {
-            CustomCommand->LoadExtension(IncludeTrailingBackslash(Path) + SearchRec.Name);
+            CustomCommand->LoadExtension(SearchRec.GetFilePath());
             FExtensionList->Add(CustomCommand.release());
           }
           catch (...)
@@ -2575,14 +2575,13 @@ TStrings * __fastcall TWinConfiguration::DoFindTemporaryFolders(bool OnlyFirst)
   std::unique_ptr<TStrings> Result(new TStringList());
   TSearchRecOwned SRec;
   UnicodeString Mask = TemporaryDir(true);
-  UnicodeString Directory = ExtractFilePath(Mask);
   if (FindFirstUnchecked(Mask, faDirectory | faHidden, SRec) == 0)
   {
     do
     {
       if (SRec.IsDirectory())
       {
-        Result->Add(Directory + SRec.Name);
+        Result->Add(SRec.GetFilePath());
       }
     }
     while ((FindNextChecked(SRec) == 0) && (!OnlyFirst || Result->Count == 0));