Commit 1b72a563 by Justin Squirek Committed by Pierre-Marie de Rodat

[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
parent e6bc029a
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
exit when Idx > Arg_String'Last;
-- Skip extraneous spaces
declare
Backqd : Boolean := False;
Quoted : Boolean := False;
while Idx <= Arg_String'Last and then Arg_String (Idx) = ' ' loop
Idx := Idx + 1;
end loop;
exit when Idx > Arg_String'Last;
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));
......
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.
......
-- { 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;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment