spawn_24.0.0_8f4c2fa8/source/spawn/spawn-environments-internal__windows.adb

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
--
--  Copyright (C) 2018-2019, AdaCore
--
--  SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
--

with Ada.Strings.UTF_Encoding.Wide_Strings;
with Ada.Strings.Wide_Unbounded;

pragma Warnings (Off);
with System.Win32;
pragma Warnings (On);

with Spawn.Internal;

package body Spawn.Environments.Internal is

   ---------
   -- Raw --
   ---------

   function Raw
     (Self : Process_Environment'Class) return Interfaces.C.wchar_array
   is
      Sum : Ada.Strings.Wide_Unbounded.Unbounded_Wide_String;
   begin
      for J in Self.Map.Iterate loop
         Ada.Strings.Wide_Unbounded.Append
           (Sum,
            Spawn.Internal.Environments.To_Key (UTF_8_String_Maps.Key (J)));

         Ada.Strings.Wide_Unbounded.Append (Sum, "=");

         Ada.Strings.Wide_Unbounded.Append
           (Sum,
            Ada.Strings.UTF_Encoding.Wide_Strings.Decode
              (UTF_8_String_Maps.Element (J)));

         Ada.Strings.Wide_Unbounded.Append (Sum, Wide_Character'Val (0));
      end loop;

      Ada.Strings.Wide_Unbounded.Append (Sum, Wide_Character'Val (0));

      return Interfaces.C.To_C
        (Ada.Strings.Wide_Unbounded.To_Wide_String (Sum));
   end Raw;

end Spawn.Environments.Internal;