-- this type will in fact be used for aliasing values of other types.
function To_chars_ptr is
- new Ada.Unchecked_Conversion (Address, chars_ptr);
+ new Ada.Unchecked_Conversion (System.Parameters.C_Address, chars_ptr);
function To_Address is
- new Ada.Unchecked_Conversion (chars_ptr, Address);
+ new Ada.Unchecked_Conversion (chars_ptr, System.Parameters.C_Address);
-----------------------
-- Local Subprograms --
-- compatible, so we directly import here the malloc and free routines.
function Memory_Alloc (Size : size_t) return chars_ptr;
- pragma Import (C, Memory_Alloc, "__gnat_malloc");
+ pragma Import (C, Memory_Alloc, System.Parameters.C_Malloc_Linkname);
procedure Memory_Free (Address : chars_ptr);
pragma Import (C, Memory_Free, "__gnat_free");
----------------
function New_String (Str : String) return chars_ptr is
- -- It's important that this subprogram uses directly the heap to compute
+
+ -- It's important that this subprogram uses the heap directly to compute
-- the result, and doesn't copy the string on the stack, otherwise its
-- use is limited when used from tasks on large strings.
- Result : constant chars_ptr := Memory_Alloc (Str'Length + 1);
+ Result : constant chars_ptr := Memory_Alloc (Str'Length + 1);
+
Result_Array : char_array (1 .. Str'Length + 1);
for Result_Array'Address use To_Address (Result);
pragma Import (Ada, Result_Array);
Count : size_t;
+
begin
To_C
(Item => Str,
Target => Result_Array,
Count => Count,
Append_Nul => True);
-
return Result;
end New_String;