diff --git a/components/codetools/basiccodetools.pas b/components/codetools/basiccodetools.pas index 30785a10c5..fbc622b03c 100644 --- a/components/codetools/basiccodetools.pas +++ b/components/codetools/basiccodetools.pas @@ -3161,11 +3161,12 @@ function GatherUnitFiles(const BaseDir, SearchPath, // CaseInsensitive: true to ignore case on comparing extensions // TreeOfUnitFiles: tree of TUnitFileInfo var - SearchedDirectories: TAVLTree; // tree of PAnsiString + SearchedDirectories: TAVLTree; // tree of AnsiString function DirectoryAlreadySearched(const ADirectory: string): boolean; begin - Result:=false; + Result:=(SearchedDirectories<>nil) + and (SearchedDirectories.Find(Pointer(ADirectory))<>nil); end; procedure MarkDirectoryAsSearched(const ADirectory: string); @@ -3173,11 +3174,12 @@ var s: String; begin // increase refcount - s:=ADirectory; + //DebugLn('MarkDirectoryAsSearched ',ADirectory); + s:=ADirectory; // increase refcount if SearchedDirectories=nil then - SearchedDirectories:=TAVLTree.Create(@ComparePAnsiStringFilenames); - SearchedDirectories.Add(@s); - Pointer(s):=nil; + SearchedDirectories:=TAVLTree.Create(@CompareAnsiStringFilenames); + SearchedDirectories.Add(Pointer(s)); + Pointer(s):=nil; // keep refcount end; procedure FreeSearchedDirectories; @@ -3190,6 +3192,7 @@ var ANode:=SearchedDirectories.FindLowest; while ANode<>nil do begin Pointer(s):=ANode.Data; + //DebugLn('FreeSearchedDirectories ',s); s:=''; // decrease refcount ANode:=SearchedDirectories.FindSuccessor(ANode); end; diff --git a/components/codetools/fileprocs.pas b/components/codetools/fileprocs.pas index 25d8226da1..a9fc278f6e 100644 --- a/components/codetools/fileprocs.pas +++ b/components/codetools/fileprocs.pas @@ -84,7 +84,7 @@ function ClearFile(const Filename: string; RaiseOnError: boolean): boolean; function GetTempFilename(const Path, Prefix: string): string; function FindDiskFilename(const Filename: string): string; -function ComparePAnsiStringFilenames(Data1, data2: Pointer): integer; +function CompareAnsiStringFilenames(Data1, data2: Pointer): integer; type TCTPascalExtType = (petNone, petPAS, petPP, petP); @@ -367,14 +367,18 @@ begin until StartPos>length(Result); end; -function ComparePAnsiStringFilenames(Data1, data2: Pointer): integer; +function CompareAnsiStringFilenames(Data1, data2: Pointer): integer; var s1: String; s2: String; begin - s1:=PAnsiString(Data1)^; - s2:=PAnsiString(Data1)^; + s1:=''; + s2:=''; + Pointer(s1):=Data1; + Pointer(s2):=Data2; Result:=CompareFilenames(s1,s2); + Pointer(s1):=nil; + Pointer(s2):=nil; end; function CompareFilenames(const Filename1, Filename2: string): integer;