From: joel Date: Thu, 8 Apr 2004 17:30:32 +0000 (+0000) Subject: 2004-04-08 Joel Sherrill X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=commitdiff_plain;h=59fb70e4ea6b44469da6d32bb3e23cd684515546 2004-04-08 Joel Sherrill PR ada/14665 * ada/osint.adb (Find_Program_Name): Rework to properly handle filenames which end in .exe or have versioning suffixes like VMS. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@80514 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b0718ffcfcb..7639f5efac2 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2004-04-08 Joel Sherrill + + PR ada/14665 + * ada/osint.adb (Find_Program_Name): Rework to properly handle + filenames which end in .exe or have versioning suffixes like VMS. + 2004-04-08 Andrew Pinski PR target/10129 diff --git a/gcc/ada/osint.adb b/gcc/ada/osint.adb index e2e559fac7e..2dc5c321509 100644 --- a/gcc/ada/osint.adb +++ b/gcc/ada/osint.adb @@ -1008,12 +1008,37 @@ package body Osint is end if; end loop; - for J in reverse Cindex1 .. Cindex2 loop - if Command_Name (J) = '.' then - Cindex2 := J - 1; - exit; + -- Command_Name(Cindex1 .. Cindex2) is now the equivalent of the + -- POSIX command "basename argv[0]" + + -- Strip off any versioning information such as found on VMS. + -- This would take the form of TOOL.exe followed by a ";" or "." + -- and a sequence of one or more numbers. + + if Command_Name (Cindex2) in '0' .. '9' then + for J in reverse Cindex1 .. Cindex2 loop + + exit when Command_Name (J) not in '0' .. '9'; + + if Command_Name (J) = '.' or Command_Name (J) = ';' then + Cindex2 := J - 1; + exit; + end if; + end loop; + end if; + + -- Strip off any executable extension (usually nothing or .exe) + -- but formally reported by autoconf in the variable EXEEXT + + if Cindex2 - Cindex1 >= 4 then + if To_Lower (Command_Name (Cindex2 - 3)) = '.' + and then To_Lower (Command_Name (Cindex2 - 2)) = 'e' + and then To_Lower (Command_Name (Cindex2 - 1)) = 'x' + and then To_Lower (Command_Name (Cindex2)) = 'e' + then + Cindex2 := Cindex2 - 4; end if; - end loop; + end if; Name_Len := Cindex2 - Cindex1 + 1; Name_Buffer (1 .. Name_Len) := Command_Name (Cindex1 .. Cindex2);