OSDN Git Service

2004-04-08 Joel Sherrill <joel@oarcorp.com>
authorjoel <joel@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 8 Apr 2004 17:30:32 +0000 (17:30 +0000)
committerjoel <joel@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 8 Apr 2004 17:30:32 +0000 (17:30 +0000)
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

gcc/ChangeLog
gcc/ada/osint.adb

index b0718ff..7639f5e 100644 (file)
@@ -1,3 +1,9 @@
+2004-04-08  Joel Sherrill  <joel@oarcorp.com>
+
+       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  <pinskia@physics.uc.edu>
 
        PR target/10129
index e2e559f..2dc5c32 100644 (file)
@@ -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);