+ implemented environment variables support in the DOS unit for the WASI target

git-svn-id: trunk@49551 -
This commit is contained in:
nickysn 2021-06-23 23:15:15 +00:00
parent c275c3c7f2
commit afb9c2ae94
2 changed files with 61 additions and 24 deletions

View File

@ -721,54 +721,66 @@ End;
******************************************************************************}
Function EnvCount: Longint;
{var
var
envcnt : longint;
p : ppchar;}
p : ppchar;
Begin
(* envcnt:=0;
p:=envp; {defined in syslinux}
while (p^<>nil) do
begin
inc(envcnt);
inc(p);
end;
EnvCount := envcnt*)
envcnt:=0;
p:=envp; {defined in system}
if p<>nil then
while p^<>nil do
begin
inc(envcnt);
inc(p);
end;
EnvCount := envcnt
End;
Function EnvStr (Index: longint): String;
{Var
Var
i : longint;
p : ppchar;}
p : ppchar;
Begin
(* if Index <= 0 then
if (Index <= 0) or (envp=nil) then
envstr:=''
else
begin
p:=envp; {defined in syslinux}
p:=envp; {defined in system}
i:=1;
while (i<Index) and (p^<>nil) do
begin
inc(i);
inc(p);
end;
if p=nil then
if p^=nil then
envstr:=''
else
envstr:=strpas(p^)
end;*)
end;
end;
Function GetEnv(EnvVar: String): String;
{var
p : pchar;}
var
hp : ppchar;
hs : string;
eqpos : longint;
Begin
{ p:=BaseUnix.fpGetEnv(EnvVar);
if p=nil then
GetEnv:=''
else
GetEnv:=StrPas(p);}
getenv:='';
hp:=envp;
if hp<>nil then
while assigned(hp^) do
begin
hs:=strpas(hp^);
eqpos:=pos('=',hs);
if copy(hs,1,eqpos-1)=envvar then
begin
getenv:=copy(hs,eqpos+1,length(hs)-eqpos);
break;
end;
inc(hp);
end;
End;

View File

@ -51,6 +51,7 @@ const
var
argc: longint;
argv: PPChar;
envp: PPChar;
preopened_dirs_count: longint;
preopened_dirs: PPChar;
drives_count: longint;
@ -79,6 +80,8 @@ var
argv_size,
argv_buf_size: __wasi_size_t;
argv_buf: Pointer;
environc,environ_buf_size,envp_size: __wasi_size_t;
environ_buf: Pointer;
function GetProcessID: SizeUInt;
begin
@ -239,6 +242,27 @@ begin
Inc(current_drive);
end;
procedure Setup_Environment;
begin
if envp<>nil then
exit;
if __wasi_environ_sizes_get(@environc, @environ_buf_size)<>__WASI_ERRNO_SUCCESS then
begin
envp:=nil;
exit;
end;
envp_size:=(environc+1)*SizeOf(PChar);
GetMem(envp, envp_size);
GetMem(environ_buf, environ_buf_size);
envp[environc]:=nil;
if __wasi_environ_get(Pointer(envp), environ_buf)<>__WASI_ERRNO_SUCCESS then
begin
FreeMem(envp, envp_size);
FreeMem(environ_buf, environ_buf_size);
envp:=nil;
end;
end;
procedure setup_arguments;
begin
if argv<>nil then
@ -361,5 +385,6 @@ begin
{$ifdef FPC_HAS_FEATURE_THREADING}
InitSystemThreads;
{$endif}
Setup_PreopenedDirs
Setup_Environment;
Setup_PreopenedDirs;
end.