How to read an environment variable

All except GUI problems
Post Reply
manumart1
Posts: 67
Joined: Tue Sep 17, 2013 6:25 am

How to read an environment variable

Post by manumart1 »

I wanted to get the value of the environment variable HOMEPATH.
I've found that WinApi.GetEnvironmentVariableW provides that.
But in order to make it easier, I've written a wrapper function:

Code: Select all

PROCEDURE EnvVarValue* (IN pName: ARRAY OF CHAR): POINTER TO ARRAY OF CHAR;
(* Returns the value of the environment variable named pName, e.g. EnvVarValue('HOMEPATH') *)
  VAR arrOut: POINTER TO ARRAY OF CHAR;
    envVarName, envVarValue: WinApi.PtrWSTR;
    lenValue: INTEGER;
BEGIN
  envVarName := pName;
  NEW(arrOut, 80); envVarValue := arrOut^;
  lenValue := WinApi.GetEnvironmentVariableW(envVarName, envVarValue, LEN(arrOut));
  IF lenValue = 0 THEN
    (* There is no such environment variable; or error *)
    envVarValue := ""
  ELSIF lenValue > LEN(arrOut) THEN
    (* The out array is not large enough to store the value of the environment variable. Now, the out array will be allocated with the exact size. *)
    NEW(arrOut, lenValue); envVarValue := arrOut^;
    lenValue := WinApi.GetEnvironmentVariableW(envVarName, envVarValue, LEN(arrOut));
    ASSERT(lenValue <= LEN(arrOut), 60)
  END;
  arrOut^ := envVarValue$;
  RETURN arrOut
END EnvVarValue;
Regards,
Manuel
Post Reply