Hi list,

It seems FPC allows one to retrieve environment variables on Linux/Unix
(GetEnvironmentVariable) but not to set them.

Is that correct?

Some digging:
Setting environment variables on Unix with gnu libc:
http://www.gnu.org/s/libc/manual/html_node/Environment-Access.html#Environment-Access
int setenv (const char *name, const char *value, int replace)
The setenv function can be used to add a new definition to the
environment. The entry with the name name is replaced by the value
‘name=value’.
If replace = 1, replace existing variable.

This one seems not to be present in FPC libc code
Maybe something like (taken from netware source\rtl\netwlibc\libc.pp):
function setenv(_para1:Pchar; _para2:Pchar;
_para3:longint):longint;cdecl;external clib name 'setenv';

remove environment variable:
int unsetenv (const char *name)
The function return -1 if name is a null pointer, points to an empty
string, or points to a string containing a = character. It returns 0 if
the call succeeded.
also adapted from netware
function unsetenv(name:Pchar):longint;cdecl;external clib name 'unsetenv';

Can I just do something like (air code):
Should a c int be an int or a longint or something like cint?

Thanks, Reinier

{$IFDEF Unix}
//should a c int be an int or a longint or something like cint?
function setenv(name:Pchar; value:Pchar;
replace:longint):longint;cdecl;external clib name 'setenv';
function unsetenv(name:Pchar):longint;cdecl;external clib name 'unsetenv';
function SetEnvironmentVariable(name:string; value:string):boolean;
// Set environment variable; if empty string given, remove it.
// Done for Windows compatibility as in Unixy environments,
// blank environment variables actually may exist.
begin
  result:=false; //assume failure
  if Name:='' then
  begin
    // Assume user wants to remove variable.
    if unsetenv(PChar(name))=0 then result:=true;
  end
  else
  begin
    // Non empty so set the variable
    if setenv(PChar(name), PChar(value), 1)=0 then result:=true;
  end;
end;
{$ENDIF}
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to