mirror of git://gcc.gnu.org/git/gcc.git
[Ada] Argument_String_To_List creates empty items from whitespace
This patch corrects an issue whereby leading whitespace in a non-quoted argument list passed to Argument_String_To_List caused extraneous empty arguments to be returned. 2018-07-17 Justin Squirek <squirek@adacore.com> gcc/ada/ * libgnat/s-os_lib.adb (Argument_String_To_List): Fix trimming of whitespace. gcc/testsuite/ * gnat.dg/split_args.adb: New testcase. From-SVN: r262783
This commit is contained in:
parent
e6bc029a34
commit
1b72a5637c
|
|
@ -1,3 +1,8 @@
|
|||
2018-07-17 Justin Squirek <squirek@adacore.com>
|
||||
|
||||
* libgnat/s-os_lib.adb (Argument_String_To_List): Fix trimming of
|
||||
whitespace.
|
||||
|
||||
2018-07-17 Hristian Kirtchev <kirtchev@adacore.com>
|
||||
|
||||
* sem_prag.adb (Has_Visible_State): Do not consider constants as
|
||||
|
|
|
|||
|
|
@ -178,7 +178,6 @@ package body System.OS_Lib is
|
|||
|
||||
return Len;
|
||||
end Args_Length;
|
||||
|
||||
-----------------------------
|
||||
-- Argument_String_To_List --
|
||||
-----------------------------
|
||||
|
|
@ -191,6 +190,9 @@ package body System.OS_Lib is
|
|||
Idx : Integer;
|
||||
New_Argc : Natural := 0;
|
||||
|
||||
Backqd : Boolean := False;
|
||||
Quoted : Boolean := False;
|
||||
|
||||
Cleaned : String (1 .. Arg_String'Length);
|
||||
Cleaned_Idx : Natural;
|
||||
-- A cleaned up version of the argument. This function is taking
|
||||
|
|
@ -205,14 +207,17 @@ package body System.OS_Lib is
|
|||
Idx := Arg_String'First;
|
||||
|
||||
loop
|
||||
-- Skip extraneous spaces
|
||||
|
||||
while Idx <= Arg_String'Last and then Arg_String (Idx) = ' ' loop
|
||||
Idx := Idx + 1;
|
||||
end loop;
|
||||
|
||||
exit when Idx > Arg_String'Last;
|
||||
|
||||
declare
|
||||
Backqd : Boolean := False;
|
||||
Quoted : Boolean := False;
|
||||
|
||||
begin
|
||||
Cleaned_Idx := Cleaned'First;
|
||||
Backqd := False;
|
||||
Quoted := False;
|
||||
|
||||
loop
|
||||
-- An unquoted space is the end of an argument
|
||||
|
|
@ -267,13 +272,6 @@ package body System.OS_Lib is
|
|||
New_Argc := New_Argc + 1;
|
||||
New_Argv (New_Argc) :=
|
||||
new String'(Cleaned (Cleaned'First .. Cleaned_Idx - 1));
|
||||
|
||||
-- Skip extraneous spaces
|
||||
|
||||
while Idx <= Arg_String'Last and then Arg_String (Idx) = ' ' loop
|
||||
Idx := Idx + 1;
|
||||
end loop;
|
||||
end;
|
||||
end loop;
|
||||
|
||||
return new Argument_List'(New_Argv (1 .. New_Argc));
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
2018-07-17 Justin Squirek <squirek@adacore.com>
|
||||
|
||||
* gnat.dg/split_args.adb: New testcase.
|
||||
|
||||
2018-07-17 Ed Schonberg <schonberg@adacore.com>
|
||||
|
||||
* gnat.dg/discr54.adb, gnat.dg/discr54_pkg.ads: New testcase.
|
||||
|
|
|
|||
|
|
@ -0,0 +1,13 @@
|
|||
-- { dg-do run }
|
||||
-- { dg-options "-gnatws" }
|
||||
|
||||
with System.OS_Lib; use System.OS_Lib;
|
||||
|
||||
procedure Split_Args is
|
||||
X : constant Argument_List_Access :=
|
||||
Argument_String_To_List (" -v");
|
||||
begin
|
||||
if X'Length /= 1 then
|
||||
raise Program_Error;
|
||||
end if;
|
||||
end Split_Args;
|
||||
Loading…
Reference in New Issue