mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-12 22:39:36 +02:00
+ implemented environment variables support in the DOS unit for the WASI target
git-svn-id: trunk@49551 -
This commit is contained in:
parent
c275c3c7f2
commit
afb9c2ae94
@ -721,54 +721,66 @@ End;
|
|||||||
******************************************************************************}
|
******************************************************************************}
|
||||||
|
|
||||||
Function EnvCount: Longint;
|
Function EnvCount: Longint;
|
||||||
{var
|
var
|
||||||
envcnt : longint;
|
envcnt : longint;
|
||||||
p : ppchar;}
|
p : ppchar;
|
||||||
Begin
|
Begin
|
||||||
(* envcnt:=0;
|
envcnt:=0;
|
||||||
p:=envp; {defined in syslinux}
|
p:=envp; {defined in system}
|
||||||
while (p^<>nil) do
|
if p<>nil then
|
||||||
begin
|
while p^<>nil do
|
||||||
inc(envcnt);
|
begin
|
||||||
inc(p);
|
inc(envcnt);
|
||||||
end;
|
inc(p);
|
||||||
EnvCount := envcnt*)
|
end;
|
||||||
|
EnvCount := envcnt
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
|
||||||
Function EnvStr (Index: longint): String;
|
Function EnvStr (Index: longint): String;
|
||||||
{Var
|
Var
|
||||||
i : longint;
|
i : longint;
|
||||||
p : ppchar;}
|
p : ppchar;
|
||||||
Begin
|
Begin
|
||||||
(* if Index <= 0 then
|
if (Index <= 0) or (envp=nil) then
|
||||||
envstr:=''
|
envstr:=''
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
p:=envp; {defined in syslinux}
|
p:=envp; {defined in system}
|
||||||
i:=1;
|
i:=1;
|
||||||
while (i<Index) and (p^<>nil) do
|
while (i<Index) and (p^<>nil) do
|
||||||
begin
|
begin
|
||||||
inc(i);
|
inc(i);
|
||||||
inc(p);
|
inc(p);
|
||||||
end;
|
end;
|
||||||
if p=nil then
|
if p^=nil then
|
||||||
envstr:=''
|
envstr:=''
|
||||||
else
|
else
|
||||||
envstr:=strpas(p^)
|
envstr:=strpas(p^)
|
||||||
end;*)
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
Function GetEnv(EnvVar: String): String;
|
Function GetEnv(EnvVar: String): String;
|
||||||
{var
|
var
|
||||||
p : pchar;}
|
hp : ppchar;
|
||||||
|
hs : string;
|
||||||
|
eqpos : longint;
|
||||||
Begin
|
Begin
|
||||||
{ p:=BaseUnix.fpGetEnv(EnvVar);
|
getenv:='';
|
||||||
if p=nil then
|
hp:=envp;
|
||||||
GetEnv:=''
|
if hp<>nil then
|
||||||
else
|
while assigned(hp^) do
|
||||||
GetEnv:=StrPas(p);}
|
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;
|
End;
|
||||||
|
|
||||||
|
|
||||||
|
@ -51,6 +51,7 @@ const
|
|||||||
var
|
var
|
||||||
argc: longint;
|
argc: longint;
|
||||||
argv: PPChar;
|
argv: PPChar;
|
||||||
|
envp: PPChar;
|
||||||
preopened_dirs_count: longint;
|
preopened_dirs_count: longint;
|
||||||
preopened_dirs: PPChar;
|
preopened_dirs: PPChar;
|
||||||
drives_count: longint;
|
drives_count: longint;
|
||||||
@ -79,6 +80,8 @@ var
|
|||||||
argv_size,
|
argv_size,
|
||||||
argv_buf_size: __wasi_size_t;
|
argv_buf_size: __wasi_size_t;
|
||||||
argv_buf: Pointer;
|
argv_buf: Pointer;
|
||||||
|
environc,environ_buf_size,envp_size: __wasi_size_t;
|
||||||
|
environ_buf: Pointer;
|
||||||
|
|
||||||
function GetProcessID: SizeUInt;
|
function GetProcessID: SizeUInt;
|
||||||
begin
|
begin
|
||||||
@ -239,6 +242,27 @@ begin
|
|||||||
Inc(current_drive);
|
Inc(current_drive);
|
||||||
end;
|
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;
|
procedure setup_arguments;
|
||||||
begin
|
begin
|
||||||
if argv<>nil then
|
if argv<>nil then
|
||||||
@ -361,5 +385,6 @@ begin
|
|||||||
{$ifdef FPC_HAS_FEATURE_THREADING}
|
{$ifdef FPC_HAS_FEATURE_THREADING}
|
||||||
InitSystemThreads;
|
InitSystemThreads;
|
||||||
{$endif}
|
{$endif}
|
||||||
Setup_PreopenedDirs
|
Setup_Environment;
|
||||||
|
Setup_PreopenedDirs;
|
||||||
end.
|
end.
|
||||||
|
Loading…
Reference in New Issue
Block a user