with Interfaces.C.Strings; with Ada.Characters.Handling; package body CGI.Environment is function Value (Name : Variable) return String is -- Return the value of the given environment variable. -- If there's no such environment variable, return an empty string. use Interfaces.C.Strings; Name_In_C_Format : chars_ptr := New_String(Ada.Characters.Handling.To_Upper(Variable'Image(Name))); function getenv(Name : chars_ptr) return chars_ptr; pragma Import(C, getenv); Result_Ptr : chars_ptr := getenv(Name_In_C_Format); -- getenv is a standard C library function; see K&R 2, 1988, page 253. -- it returns a pointer to the first character; do NOT free its results. function Get_Result return String is begin if Result_Ptr = Null_Ptr then return ""; else return Value(Result_Ptr); end if; end; Result : String := Get_Result; begin -- Value Free (Name_In_C_Format); return Result; end Value; ----------------- function Server_Port return Natural is begin return Natural'Value (Value(Server_Port)); end; function Content_Length return Natural is begin return Natural'Value (Value(Content_Length)); end; end CGI.Environment;