2008-05-27 Vincent Celier <celier@adacore.com>

* prj-part.adb:
	(Project_Path_Name_Of.Try_Path): Do not use Locate_Regular_File to find
	a project file, so that symbolic links are not resolved.

From-SVN: r136019
This commit is contained in:
Vincent Celier 2008-05-27 13:55:41 +02:00 committed by Arnaud Charlet
parent 3aa62371fc
commit ea9fba99de
1 changed files with 54 additions and 3 deletions

View File

@ -39,6 +39,8 @@ with Table;
with Ada.Characters.Handling; use Ada.Characters.Handling;
with Ada.Exceptions; use Ada.Exceptions;
with GNAT.Directory_Operations; use GNAT.Directory_Operations;
with System.HTable; use System.HTable;
package body Prj.Part is
@ -1864,15 +1866,64 @@ package body Prj.Part is
-------------------
function Try_Path_Name (Path : String) return String_Access is
Prj_Path : constant String := Project_Path;
First : Natural := Prj_Path'First;
Last : Natural;
Result : String_Access := null;
begin
if Current_Verbosity = High then
Write_Str (" Trying ");
Write_Line (Path);
end if;
return Locate_Regular_File
(File_Name => Path,
Path => Project_Path);
if Is_Absolute_Path (Path) then
if Is_Regular_File (Path) then
Result := new String'(Path);
end if;
else
-- Because we don't want to resolve symbolic links, we cannot use
-- Locate_Regular_File. So, we try each possible path
-- successively.
while First <= Prj_Path'Last loop
while First <= Prj_Path'Last
and then Prj_Path (First) = Path_Separator
loop
First := First + 1;
end loop;
exit when First > Prj_Path'Last;
Last := First;
while Last < Prj_Path'Last
and then Prj_Path (Last + 1) /= Path_Separator
loop
Last := Last + 1;
end loop;
Name_Len := 0;
if not Is_Absolute_Path (Prj_Path (First .. Last)) then
Add_Str_To_Name_Buffer (Get_Current_Dir);
Add_Char_To_Name_Buffer (Directory_Separator);
end if;
Add_Str_To_Name_Buffer (Prj_Path (First .. Last));
Add_Char_To_Name_Buffer (Directory_Separator);
Add_Str_To_Name_Buffer (Path);
if Is_Regular_File (Name_Buffer (1 .. Name_Len)) then
Result := new String'(Name_Buffer (1 .. Name_Len));
exit;
end if;
First := Last + 1;
end loop;
end if;
return Result;
end Try_Path_Name;
-- Local Declarations