Sfoglia il codice sorgente

Factoring out IsRealFile function

Source commit: 046570706e02ac13da6ecbde4c6d270637c9af56
Martin Prikryl 7 anni fa
parent
commit
41f9c0137f

+ 1 - 1
source/components/UnixDirView.cpp

@@ -314,7 +314,7 @@ void __fastcall TUnixDirView::LoadFiles()
         FHiddenCount++;
       }
       else if (!Mask.IsEmpty() &&
-               !File->IsParentDirectory && !File->IsThisDirectory &&
+               IsRealFile(File->FileName) &&
                !FileNameMatchesMasks(File->FileName, File->IsDirectory, File->Size, File->Modification, Mask, true))
       {
         FFilteredCount++;

+ 1 - 1
source/components/UnixDriveView.cpp

@@ -204,7 +204,7 @@ void __fastcall TCustomUnixDriveView::UpdatePath(TTreeNode * Node, bool Force,
       for (int i = 0; i < Data->FileList->Count; i++)
       {
         TRemoteFile * File = Data->FileList->Files[i];
-        if (File->IsDirectory && !File->IsParentDirectory && !File->IsThisDirectory &&
+        if (File->IsDirectory && IsRealFile(File->FileName) &&
             (ShowHiddenDirs || !File->IsHidden) &&
             (ShowInaccesibleDirectories || !File->IsInaccesibleDirectory))
         {

+ 7 - 2
source/core/Common.cpp

@@ -1388,6 +1388,11 @@ bool __fastcall FileSearchRec(const UnicodeString FileName, TSearchRec & Rec)
   return Result;
 }
 //---------------------------------------------------------------------------
+bool __fastcall IsRealFile(const UnicodeString & FileName)
+{
+  return (FileName != THISDIRECTORY) && (FileName != PARENTDIRECTORY);
+}
+//---------------------------------------------------------------------------
 void __fastcall ProcessLocalDirectory(UnicodeString DirName,
   TProcessLocalFileEvent CallBackFunc, void * Param,
   int FindAttrs)
@@ -1404,7 +1409,7 @@ void __fastcall ProcessLocalDirectory(UnicodeString DirName,
   {
     do
     {
-      if ((SearchRec.Name != L".") && (SearchRec.Name != L".."))
+      if (IsRealFile(SearchRec.Name))
       {
         CallBackFunc(DirName + SearchRec.Name, SearchRec, Param);
       }
@@ -2308,7 +2313,7 @@ static bool __fastcall DoRecursiveDeleteFile(const UnicodeString FileName, bool
               UnicodeString FileName2 = FileName + L"\\" + SearchRec.Name;
               if (FLAGSET(SearchRec.Attr, faDirectory))
               {
-                if ((SearchRec.Name != L".") && (SearchRec.Name != L".."))
+                if (IsRealFile(SearchRec.Name))
                 {
                   Result = DoRecursiveDeleteFile(FileName2, DebugAlwaysFalse(ToRecycleBin), AErrorPath);
                 }

+ 4 - 0
source/core/Common.h

@@ -18,6 +18,9 @@
 #define SWAP(TYPE, FIRST, SECOND) \
   { TYPE __Backup = FIRST; FIRST = SECOND; SECOND = __Backup; }
 //---------------------------------------------------------------------------
+#define PARENTDIRECTORY L".."
+#define THISDIRECTORY L"."
+//---------------------------------------------------------------------------
 extern const wchar_t EngShortMonthNames[12][4];
 extern const char Bom[3];
 extern const wchar_t TokenPrefix;
@@ -171,6 +174,7 @@ UnicodeString __fastcall ChangeUrlProtocol(const UnicodeString & S, const Unicod
 void __fastcall LoadScriptFromFile(UnicodeString FileName, TStrings * Lines);
 UnicodeString __fastcall StripEllipsis(const UnicodeString & S);
 UnicodeString __fastcall GetFileMimeType(const UnicodeString & FileName);
+bool __fastcall IsRealFile(const UnicodeString & FileName);
 //---------------------------------------------------------------------------
 typedef void __fastcall (__closure* TProcessLocalFileEvent)
   (const UnicodeString FileName, const TSearchRec Rec, void * Param);

+ 1 - 1
source/core/FtpFileSystem.cpp

@@ -1167,7 +1167,7 @@ void __fastcall TFTPFileSystem::DoCalculateFilesChecksum(bool UsingHashCommand,
     if (File->IsDirectory)
     {
       if (FTerminal->CanRecurseToDirectory(File) &&
-          !File->IsParentDirectory && !File->IsThisDirectory &&
+          IsRealFile(File->FileName) &&
           // recurse into subdirectories only if we have callback function
           (OnCalculatedChecksum != NULL))
       {

+ 2 - 3
source/core/RemoteFiles.cpp

@@ -205,8 +205,7 @@ bool __fastcall IsUnixRootPath(const UnicodeString Path)
 //---------------------------------------------------------------------------
 bool __fastcall IsUnixHiddenFile(const UnicodeString FileName)
 {
-  return (FileName != THISDIRECTORY) && (FileName != PARENTDIRECTORY) &&
-    !FileName.IsEmpty() && (FileName[1] == L'.');
+  return IsRealFile(FileName) && !FileName.IsEmpty() && (FileName[1] == L'.');
 }
 //---------------------------------------------------------------------------
 UnicodeString __fastcall AbsolutePath(const UnicodeString & Base, const UnicodeString & Path)
@@ -463,7 +462,7 @@ int __fastcall FakeFileImageIndex(UnicodeString FileName, unsigned long Attrs,
 
   TSHFileInfoW SHFileInfo;
   // On Win2k we get icon of "ZIP drive" for ".." (parent directory)
-  if ((FileName == L"..") ||
+  if ((FileName == PARENTDIRECTORY) ||
       ((FileName.Length() == 2) && (FileName[2] == L':') && IsLetter(FileName[1])) ||
       IsReservedName(FileName))
   {

+ 0 - 2
source/core/RemoteFiles.h

@@ -8,8 +8,6 @@
 enum TModificationFmt { mfNone, mfMDHM, mfMDY, mfFull };
 //---------------------------------------------------------------------------
 #define SYMLINKSTR L" -> "
-#define PARENTDIRECTORY L".."
-#define THISDIRECTORY L"."
 #define ROOTDIRECTORY L"/"
 #define FILETYPE_DEFAULT L'-'
 #define FILETYPE_SYMLINK L'L'

+ 1 - 1
source/core/ScpFileSystem.cpp

@@ -2004,7 +2004,7 @@ void __fastcall TSCPFileSystem::SCPDirectorySource(const UnicodeString Directory
       UnicodeString FileName = IncludeTrailingBackslash(DirectoryName) + SearchRec.Name;
       try
       {
-        if ((SearchRec.Name != L".") && (SearchRec.Name != L".."))
+        if (IsRealFile(SearchRec.Name))
         {
           SCPSource(FileName, TargetDirFull, CopyParam, Params, OperationProgress, Level + 1);
         }

+ 2 - 2
source/core/Script.cpp

@@ -631,7 +631,7 @@ TStrings * __fastcall TScript::CreateFileList(TScriptProcParams * Parameters, in
               TFileMasks::TParams Params;
               Params.Size = File->Size;
               Params.Modification = File->Modification;
-              if (!File->IsThisDirectory && !File->IsParentDirectory &&
+              if (IsRealFile(File->FileName) &&
                   Mask.Matches(File->FileName, false, UnicodeString(), &Params))
               {
                 Result->AddObject(FileDirectory + File->FileName,
@@ -745,7 +745,7 @@ TStrings * __fastcall TScript::CreateLocalFileList(TScriptProcParams * Parameter
           UnicodeString Directory = ExtractFilePath(FileName);
           do
           {
-            if ((SearchRec.Name != L".") && (SearchRec.Name != L".."))
+            if (IsRealFile(SearchRec.Name))
             {
               UnicodeString FileName = Directory + SearchRec.Name;
               Result->Add(FileName);

+ 4 - 4
source/core/SftpFileSystem.cpp

@@ -1778,7 +1778,7 @@ protected:
       Result = !File->IsDirectory;
       if (Result)
       {
-        DebugAssert(!File->IsParentDirectory && !File->IsThisDirectory);
+        DebugAssert(IsRealFile(File->FileName));
 
         Request->ChangeType(SSH_FXP_EXTENDED);
         Request->AddString(SFTP_EXT_CHECK_FILE_NAME);
@@ -2859,7 +2859,7 @@ UnicodeString __fastcall TSFTPFileSystem::Canonify(UnicodeString Path)
   {
     UnicodeString APath = UnixExcludeTrailingBackslash(Path);
     UnicodeString Name = UnixExtractFileName(APath);
-    if (Name == L"." || Name == L"..")
+    if (!IsRealFile(Name))
     {
       Result = Path;
     }
@@ -3453,7 +3453,7 @@ void __fastcall TSFTPFileSystem::ReadDirectory(TRemoteFileList * FileList)
           File = LoadFile(&ListingPacket, NULL, L"", FileList);
           FileList->AddFile(File);
           if (FTerminal->IsEncryptingFiles() && // optimization
-              !File->IsParentDirectory && !File->IsThisDirectory)
+              IsRealFile(File->FileName))
           {
             UnicodeString FullFileName = UnixExcludeTrailingBackslash(File->FullFileName);
             UnicodeString FileName = UnixExtractFileName(FTerminal->DecryptFileName(FullFileName));
@@ -4010,7 +4010,7 @@ void __fastcall TSFTPFileSystem::DoCalculateFilesChecksum(
       TRemoteFile * File = (TRemoteFile *)FileList->Objects[Index];
       DebugAssert(File != NULL);
       if (File->IsDirectory && FTerminal->CanRecurseToDirectory(File) &&
-          !File->IsParentDirectory && !File->IsThisDirectory)
+          IsRealFile(File->FileName))
       {
         OperationProgress->SetFile(File->FileName);
         TRemoteFileList * SubFiles =

+ 5 - 5
source/core/Terminal.cpp

@@ -1180,7 +1180,7 @@ UnicodeString __fastcall TTerminal::ExpandFileName(UnicodeString Path,
   if (!UnixIsAbsolutePath(Path) && !BasePath.IsEmpty())
   {
     // TODO: Handle more complicated cases like "../../xxx"
-    if (Path == L"..")
+    if (Path == PARENTDIRECTORY)
     {
       Path = UnixExcludeTrailingBackslash(UnixExtractFilePath(
         UnixExcludeTrailingBackslash(BasePath)));
@@ -3658,7 +3658,7 @@ void __fastcall TTerminal::ProcessDirectory(const UnicodeString DirName,
       for (int Index = 0; Index < FileList->Count; Index++)
       {
         File = FileList->Files[Index];
-        if (!File->IsParentDirectory && !File->IsThisDirectory)
+        if (IsRealFile(File->FileName))
         {
           CallBackFunc(Directory + File->FileName, File, Param);
           // We should catch ESkipFile here as we do in ProcessFiles.
@@ -5554,7 +5554,7 @@ void __fastcall TTerminal::DoSynchronizeCollectDirectory(const UnicodeString Loc
           ChangeFileName(CopyParam, FileName, osLocal, false);
         UnicodeString FullLocalFileName = Data.LocalDirectory + FileName;
         UnicodeString BaseFileName = GetBaseFileName(FullLocalFileName);
-        if ((FileName != L".") && (FileName != L"..") &&
+        if (IsRealFile(FileName) &&
             CopyParam->AllowTransfer(BaseFileName, osLocal, FLAGSET(SearchRec.Attr, faDirectory), MaskParams, Hidden) &&
             !FFileSystem->TemporaryTransferFile(FileName) &&
             (FLAGCLEAR(Flags, sfFirstLevel) ||
@@ -6803,7 +6803,7 @@ void __fastcall TTerminal::DirectorySource(
       UnicodeString FileName = DirectoryName + SearchRec.Name;
       try
       {
-        if ((SearchRec.Name != L".") && (SearchRec.Name != L".."))
+        if (IsRealFile(SearchRec.Name))
         {
           SourceRobust(FileName, DestFullName, CopyParam, Params, OperationProgress, (Flags & ~(tfFirstLevel | tfAutoResume)));
           // FTP: if any file got uploaded (i.e. there were any file in the directory and at least one was not skipped),
@@ -7751,7 +7751,7 @@ UnicodeString __fastcall TTerminal::EncryptFileName(const UnicodeString & Path,
     UnicodeString FileName = UnixExtractFileName(Path);
     UnicodeString FileDir = UnixExtractFileDir(Path);
 
-    if (!FileName.IsEmpty() && (FileName != PARENTDIRECTORY) && (FileName != THISDIRECTORY))
+    if (!FileName.IsEmpty() && IsRealFile(FileName))
     {
       TEncryptedFileNames::const_iterator I = GetEncryptedFileName(Path);
       if (I != FEncryptedFileNames.end())

+ 1 - 1
source/core/WebDAVFileSystem.cpp

@@ -806,7 +806,7 @@ void TWebDAVFileSystem::NeonPropsResult(
     UnicodeString FileListPath = Data.FileSystem->AbsolutePath(Data.FileList->Directory, false);
     if (UnixSamePath(Path, FileListPath))
     {
-      Path = UnixIncludeTrailingBackslash(UnixIncludeTrailingBackslash(Path) + L"..");
+      Path = UnixIncludeTrailingBackslash(UnixIncludeTrailingBackslash(Path) + PARENTDIRECTORY);
     }
     std::unique_ptr<TRemoteFile> File(new TRemoteFile(NULL));
     File->Terminal = Data.FileSystem->FTerminal;

+ 2 - 2
source/windows/GUITools.cpp

@@ -464,7 +464,7 @@ bool __fastcall DeleteDirectory(const UnicodeString DirName)
   {
     if (FLAGSET(sr.Attr, faDirectory))
     {
-      if (sr.Name != L"." && sr.Name != L"..")
+      if (IsRealFile(sr.Name))
         retval = DeleteDirectory(DirName + L"\\" + sr.Name);
     }
     else
@@ -478,7 +478,7 @@ bool __fastcall DeleteDirectory(const UnicodeString DirName)
       { // VCL Function
         if (FLAGSET(sr.Attr, faDirectory))
         {
-          if (sr.Name != L"." && sr.Name != L"..")
+          if (IsRealFile(sr.Name))
             retval = DeleteDirectory(DirName + L"\\" + sr.Name);
         }
         else