fixed GatherUnitFiles and implemented DirectoryAlreadySearched

git-svn-id: trunk@8551 -
This commit is contained in:
mattias 2006-01-18 09:54:47 +00:00
parent a0733fde8c
commit 2499a88ad8
2 changed files with 17 additions and 10 deletions

View File

@ -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;

View File

@ -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;