lazutils+codetools: fixed FindDiskFilename

git-svn-id: trunk@33219 -
This commit is contained in:
mattias 2011-11-02 13:51:26 +00:00
parent f0297d8f4f
commit 099bf2898b
6 changed files with 33 additions and 29 deletions

View File

@ -330,22 +330,32 @@ begin
end;
function TCodeCache.LoadFile(const AFilename: string): TCodeBuffer;
// search file in cache
var
DiskFilename: String;
procedure FindDiskFilenameInconsistent;
var
s: String;
begin
s:='[TCodeCache.LoadFile] Inconsistency found: AFilename="'+AFilename+'" FindDiskFilename="'+DiskFilename+'"';
s:=s+' CompareFilenames='+dbgs(CompareFilenames(AFilename,DiskFilename));
raise Exception.Create(s);
end;
begin
Result:=FindFile(AFilename);
if FilenameIsAbsolute(AFilename) then begin
if Result=nil then begin
// load new buffer
Result:=TCodeBuffer.Create;
if (not FileExistsCached(AFilename)) then begin
Result.Free;
Result:=nil;
if (not FileExistsCached(AFilename)) then
exit;
end;
Result.Filename:=GetFilenameOnDisk(AFilename);
DiskFilename:=FindDiskFilename(AFilename);
if FindFile(DiskFilename)<>nil then
FindDiskFilenameInconsistent;
Result:=TCodeBuffer.Create;
Result.Filename:=DiskFilename;
Result.FCodeCache:=Self;
if (not Result.LoadFromFile(Result.Filename)) then
begin
if (not Result.LoadFromFile(Result.Filename)) then begin
Result.FCodeCache:=nil;
Result.Free;
Result:=nil;

View File

@ -161,7 +161,7 @@ function FileIsReadableCached(const AFilename: string): boolean; inline;
function FileIsWritableCached(const AFilename: string): boolean; inline;
function FileIsTextCached(const AFilename: string): boolean; inline;
function FileAgeCached(const AFileName: string): Longint; inline;
function GetFilenameOnDisk(const AFilename: string): string; inline;
function GetFilenameOnDisk(const AFilename: string): string; inline; deprecated; // use FindDiskFilename
function CompareAnsiStringFilenames(Data1, data2: Pointer): integer;
function CompareFilenameOnly(Filename: PChar; FilenameLen: integer;
@ -902,7 +902,7 @@ end;
function GetFilenameOnDisk(const AFilename: string): string;
begin
Result:=LazFileUtils.GetFilenameOnDisk(AFilename);
Result:=FindDiskFilename(AFilename);
end;
function CompareAnsiStringFilenames(Data1, data2: Pointer): integer;

View File

@ -4703,7 +4703,8 @@ begin
NewSrcLen:=length(NewSrc);
if AllChanged then begin
{$IFDEF VerboseUpdateNeeded}
debugln(['TPascalParserTool.FetchScannerSource compiler clean all nodes, because compiler mode/values changed ',MainFilename]);
if Tree.Root<>nil then
debugln(['TPascalParserTool.FetchScannerSource compiler clean all nodes, because compiler mode/values changed ',MainFilename]);
{$ENDIF}
end else begin
// find the first difference in source

View File

@ -6291,7 +6291,7 @@ var
begin
Result:=TrimFilename(AFilename);
if FilenameIsAbsolute(Result) then begin
Result:=FindDiskFilename(Result);
Result:=DirectoryCache.Pool.FindDiskFilename(Result);
Add(FilenameSrcPos,Result,FileExistsCached(Result));
//DebugLn('SearchIncludeFilename AbsoluteFilename="',Result,'"');
end else begin
@ -6302,7 +6302,7 @@ var
AFilePath:=ExtractFilePath(Result);
if AFilePath<>'' then begin
// search relative to unit
CurFilename:=FindDiskFilename(BaseDir+Result);
CurFilename:=DirectoryCache.Pool.FindDiskFilename(BaseDir+Result);
Result:=copy(CurFilename,length(BaseDir)+1,length(CurFilename));
if FileExistsCached(CurFilename) then
Add(FilenameSrcPos,CurFilename,true)

View File

@ -7,6 +7,13 @@ interface
uses
Classes, SysUtils, LazUTF8, LUResStrings;
{$if defined(Windows) or defined(darwin)}
{$define CaseInsensitiveFilenames}
{$endif}
{$IF defined(CaseInsensitiveFilenames) or defined(darwin)}
{$DEFINE NotLiteralFilenames} // e.g. HFS+ normalizes file names
{$ENDIF}
function CompareFilenames(const Filename1, Filename2: string): integer;
function CompareFilenamesIgnoreCase(const Filename1, Filename2: string): integer;
function CompareFileExt(const Filename, Ext: string;
@ -40,8 +47,6 @@ function FileIsInPath(const Filename, Path: string): boolean;
function AppendPathDelim(const Path: string): string;
function ChompPathDelim(const Path: string): string;
function GetFilenameOnDisk(const AFilename: string): string;
// file operations
function FileExistsUTF8(const Filename: string): boolean;
function FileAgeUTF8(const FileName: string): Longint;
@ -288,18 +293,6 @@ begin
end;
{$ENDIF}
function GetFilenameOnDisk(const AFilename: string): string;
begin
Result:=AFilename;
{$IFDEF darwin}
Result:=GetDarwinSystemFilename(Result);
{$ELSE}
{$IFDEF NotLiteralFilenames}
Result:=FindDiskFilename(Result);
{$ENDIF}
{$ENDIF}
end;
function CompareFilenameStarts(const Filename1, Filename2: string): integer;
var
len1: Integer;

View File

@ -9261,7 +9261,7 @@ begin
// normalize filename
AFilename:=TrimFilename(AFilename);
DiskFilename:=FindDiskFilename(AFilename);
DiskFilename:=CodeToolBoss.DirectoryCachePool.FindDiskFilename(AFilename);
if DiskFilename<>AFilename then begin
// the case is different
DebugLn(['TMainIDE.DoOpenEditorFile Fixing file case: ',AFilename,' -> ',DiskFilename]);