-- -- Copyright (C) 2022, AdaCore -- -- SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -- -- This is implementation of the package for POSIX systems. -- -- There are known limitations of the current implementation: -- -- - only UTF-8 locales are supported -- - Mac OS X use text in NFD form for paths, conversion is not implemented with Interfaces.C.Strings; with VSS.Strings.Conversions; package body VSS.Implementation.Environment_Utilities is function Decode_Native_Path (Item : Interfaces.C.Strings.chars_ptr) return VSS.Strings.Virtual_String; -- Convert path in native format to Virtual_String. function getenv (Name : Interfaces.C.Strings.chars_ptr) return Interfaces.C.Strings.chars_ptr with Import, Convention => C; ------------------------ -- Decode_Native_Path -- ------------------------ function Decode_Native_Path (Item : Interfaces.C.Strings.chars_ptr) return VSS.Strings.Virtual_String is begin -- On Mac OS X it may normalize string to NFC, because native paths -- are always decomposed to NFD. return VSS.Strings.Conversions.To_Virtual_String (Interfaces.C.Strings.Value (Item)); end Decode_Native_Path; ------------- -- Get_Env -- ------------- function Get_Env (Name : VSS.Strings.Virtual_String; Default : VSS.Strings.Virtual_String := VSS.Strings.Empty_Virtual_String) return VSS.Strings.Virtual_String is use type Interfaces.C.Strings.chars_ptr; Ada_Name : constant String := VSS.Strings.Conversions.To_UTF_8_String (Name); C_Name : aliased Interfaces.C.char_array := Interfaces.C.To_C (Ada_Name); Value : constant Interfaces.C.Strings.chars_ptr := getenv (Interfaces.C.Strings.To_Chars_Ptr (C_Name'Unchecked_Access)); begin if Value = Interfaces.C.Strings.Null_Ptr then return Default; else return Decode_Native_Path (Value); end if; end Get_Env; end VSS.Implementation.Environment_Utilities;