--
-- Copyright (C) 2022, AdaCore
--
-- SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
--
-- This is GNAT specific package, it use symbols declared in argv.c file
-- of the GNAT Run Time Library.
--
-- Note: only UTF-8 locales are supported.
with Interfaces.C.Pointers;
with Interfaces.C.Strings;
with VSS.Strings.Conversions;
separate (VSS.Application)
package body Platform is
type chars_ptr_Array is
array (Natural range <>) of aliased Interfaces.C.Strings.chars_ptr;
package chars_ptr_Pointers is
new Interfaces.C.Pointers
(Natural,
Interfaces.C.Strings.chars_ptr,
chars_ptr_Array,
Interfaces.C.Strings.Null_Ptr);
GNAT_Argc : constant Interfaces.C.int
with Import, Convention => C, External_Name => "gnat_argc";
GNAT_Argv : constant chars_ptr_Pointers.Pointer
with Import, Convention => C, External_Name => "gnat_argv";
----------------------
-- Application_File --
----------------------
function Application_File return VSS.Strings.Virtual_String is separate;
---------------
-- Arguments --
---------------
function Arguments return VSS.String_Vectors.Virtual_String_Vector is
Args : constant chars_ptr_Array :=
chars_ptr_Pointers.Value
(GNAT_Argv, Interfaces.C.ptrdiff_t (GNAT_Argc));
begin
return Result : VSS.String_Vectors.Virtual_String_Vector do
for Index in 1 .. Args'Last loop
Result.Append
(VSS.Strings.Conversions.To_Virtual_String
(Interfaces.C.Strings.Value (Args (Index))));
-- XXX Locale specific converter should be used here.
end loop;
end return;
end Arguments;
end Platform;