Merge branch 'env' into 'main'

Use Windows GetEnvironmentVariable(A|W).

See merge request freepascal.org/fpc/source!619
This commit is contained in:
Rika 2025-04-01 12:37:11 +03:00
commit 0bfcbe80c5

View File

@ -1454,7 +1454,7 @@ end;
{$checkpointer off}
Function GetEnvironmentVariable(Const EnvVar : AnsiString) : AnsiString;
{$ifdef wince}
var
oemenvvar, oemstr : RawByteString;
i, hplen : longint;
@ -1483,9 +1483,16 @@ begin
end;
FreeEnvironmentStringsA(p);
end;
{$else wince}
var
buf : array[0 .. 32767-1] of ansichar;
begin
SetString(Result,PAnsiChar(buf),GetEnvironmentVariableA(PAnsiChar(EnvVar),PAnsiChar(buf),length(buf)));
end;
{$endif wince}
Function GetEnvironmentVariable(Const EnvVar : UnicodeString) : UnicodeString;
{$ifdef wince}
var
s, upperenv : Unicodestring;
i : longint;
@ -1509,6 +1516,13 @@ begin
end;
FreeEnvironmentStringsW(p);
end;
{$else wince}
var
buf : array[0 .. 32767-1] of unicodechar;
begin
SetString(Result,PUnicodeChar(buf),GetEnvironmentVariableW(PUnicodeChar(EnvVar),PUnicodeChar(buf),length(buf)));
end;
{$endif wince}
Function GetEnvironmentVariableCount : Integer;
@ -1672,13 +1686,11 @@ end;
Initialization code
****************************************************************************}
var
kernel32dll : THandle;
Procedure LoadVersionInfo;
// and getfreespaceex
Var
versioninfo : TOSVERSIONINFO;
kernel32dll : THandle;
begin
GetDiskFreeSpaceEx:=nil;
versioninfo.dwOSVersionInfoSize:=sizeof(versioninfo);
@ -1690,17 +1702,15 @@ begin
Move (versioninfo.szCSDVersion ,Win32CSDVersion[1],128);
win32CSDVersion[0]:=chr(strlen(PAnsiChar(@versioninfo.szCSDVersion)));
kernel32dll:=GetModuleHandle('kernel32');
if kernel32dll<>0 then
GetDiskFreeSpaceEx:=TGetDiskFreeSpaceEx(GetProcAddress(kernel32dll,'GetDiskFreeSpaceExA'));
GetDiskFreeSpaceEx:=TGetDiskFreeSpaceEx(GetProcAddress(kernel32dll,'GetDiskFreeSpaceExA'));
if Win32MajorVersion<6 then
FindExInfoDefaults := FindExInfoStandard; // also searches SFNs. XP only.
if (Win32MajorVersion>=6) and (Win32MinorVersion>=1) then
FindFirstAdditionalFlags := FIND_FIRST_EX_LARGE_FETCH; // win7 and 2008R2+
// GetTimeZoneInformationForYear is supported only on Vista and newer
if (kernel32dll<>0) and (Win32MajorVersion>=6) then
if (Win32MajorVersion>=6) then
GetTimeZoneInformationForYear:=TGetTimeZoneInformationForYear(GetProcAddress(kernel32dll,'GetTimeZoneInformationForYear'));
if (kernel32dll<>0) then
GetFinalPathNameByHandle:=TGetFinalPathNameByHandle(GetProcAddress(kernel32dll,'GetFinalPathNameByHandleA'));
GetFinalPathNameByHandle:=TGetFinalPathNameByHandle(GetProcAddress(kernel32dll,'GetFinalPathNameByHandleA'));
end;
Function GetAppConfigDir(Global : Boolean) : String;