mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-11-03 21:19:38 +01:00
lazutils+codetools: fixed FindDiskFilename
git-svn-id: trunk@33219 -
This commit is contained in:
parent
f0297d8f4f
commit
099bf2898b
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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]);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user