diff options
Diffstat (limited to 'gcc/ada/gnatvsn.adb')
-rw-r--r-- | gcc/ada/gnatvsn.adb | 54 |
1 files changed, 16 insertions, 38 deletions
diff --git a/gcc/ada/gnatvsn.adb b/gcc/ada/gnatvsn.adb index ebada983ed8..cbeadd5d3f6 100644 --- a/gcc/ada/gnatvsn.adb +++ b/gcc/ada/gnatvsn.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2002 Free Software Foundation, Inc. -- +-- Copyright (C) 2002-2003 Free Software Foundation, Inc. -- -- -- -- GNAT is free software; you can redistribute it and/or modify it under -- -- terms of the GNU General Public License as published by the Free Soft- -- @@ -27,55 +27,33 @@ -- covered by the GNU Public License. -- -- -- -- GNAT was originally developed by the GNAT team at New York University. -- --- It is now maintained by Ada Core Technologies Inc (http://www.gnat.com). -- +-- Extensive contributions were provided by Ada Core Technologies Inc. -- -- -- ------------------------------------------------------------------------------ package body Gnatvsn is - -- Import the string constant defined in the (language-independent) - -- source file version.c. - - -- The size is a lie; we have no way of writing the truth (the size - -- is variable and depends on the actual text of the constant). - - -- FIXME: It should be possible to declare this to be a constant, but - -- that is rejected by the compiler ("invalid context for deferred - -- constant declaration"). Per Ada95 this constraint only applies to - -- deferred constants completed by a full constant declaration, not - -- deferred constants completed by a pragma Import. - - Version_String : array (0 .. Ver_Len_Max) of aliased Character; + Version_String : String (1 .. Ver_Len_Max); + -- Import the C string defined in the (language-independent) source file + -- version.c. + -- The size is not the real one, which does not matter since we will + -- check for the nul character in Gnat_Version_String. pragma Import (C, Version_String, "version_string"); - -- Convert that string constant to an Ada String and return it. - -- This is essentially the same as the To_Ada routine in - -- Interfaces.C; that package is not linked into gnat1 so - -- we cannot use it. - - function Gnat_Version_String return String - is - Count : Natural := 0; + ------------------------- + -- Gnat_Version_String -- + ------------------------- + function Gnat_Version_String return String is + NUL_Pos : Positive := 1; begin loop - if Version_String (Count) = Character'First then - exit; - else - Count := Count + 1; - end if; - end loop; - - declare - R : String (1 .. Count); + exit when Version_String (NUL_Pos) = ASCII.NUL; - begin - for J in R'Range loop - R (J) := Version_String (J - 1); - end loop; + NUL_Pos := NUL_Pos + 1; + end loop; - return R; - end; + return Version_String (1 .. NUL_Pos - 1); end Gnat_Version_String; end Gnatvsn; |