diff --git a/compiler/globals.pas b/compiler/globals.pas index 0d2235c1d8..818cbf9bb4 100644 --- a/compiler/globals.pas +++ b/compiler/globals.pas @@ -476,6 +476,9 @@ implementation uses {$ifdef macos} macutils, +{$endif} +{$ifdef mswindows} + windirs, {$endif} comphook; @@ -718,86 +721,18 @@ implementation Default Macro Handling ****************************************************************************} -{$ifdef mswindows} -{ - This code is copied from sysutils.pp -} - Type - PFNSHGetFolderPath = Function(Ahwnd: HWND; Csidl: Integer; Token: THandle; Flags: DWord; Path: PChar): HRESULT; stdcall; - - var - SHGetFolderPath : PFNSHGetFolderPath = Nil; - CFGDLLHandle : THandle = 0; - - const - CSIDL_PERSONAL = $0005; { %USERPROFILE%\My Documents } - CSIDL_APPDATA = $001A; { %USERPROFILE%\Application Data (roaming) } - CSIDL_LOCAL_APPDATA = $001C; { %USERPROFILE%\Local Settings\Application Data (non roaming) } - CSIDL_COMMON_APPDATA = $0023; { %PROFILESPATH%\All Users\Application Data } - CSIDL_PROGRAM_FILES = $0026; { %SYSTEMDRIVE%\Program Files } - CSIDL_PROFILE = $0028; { %USERPROFILE% } - CSIDL_PROGRAM_FILES_COMMON = $002B; { %SYSTEMDRIVE%\Program Files\Common } - - CSIDL_FLAG_CREATE = $8000; { (force creation of requested folder if it doesn't exist yet) } - - - Procedure InitDLL; - Var - pathBuf: array[0..MAX_PATH-1] of char; - pathLength: Integer; - begin - { Load shfolder.dll using a full path, in order to prevent spoofing (Mantis #18185) - Don't bother loading shell32.dll because shfolder.dll itself redirects SHGetFolderPath - to shell32.dll whenever possible. } - pathLength:=GetSystemDirectory(pathBuf, MAX_PATH); - if (pathLength>0) and (pathLength0) then - begin - Pointer(ShGetFolderPath):=GetProcAddress(CFGDLLHandle,'SHGetFolderPathA'); - If @ShGetFolderPath=nil then - begin - FreeLibrary(CFGDLLHandle); - CFGDllHandle:=0; - end; - end; - end; - If (@ShGetFolderPath=Nil) then - Raise Exception.Create('Could not determine SHGetFolderPath Function'); - end; - - - Function GetSpecialDir(ID : Integer) : String; - - Var - APath : Array[0..MAX_PATH] of char; - - begin - Result:=''; - if (CFGDLLHandle=0) then - InitDLL; - If (SHGetFolderPath<>Nil) then - begin - if SHGetFolderPath(0,ID or CSIDL_FLAG_CREATE,0,0,@APATH[0])=S_OK then - Result:=IncludeTrailingPathDelimiter(StrPas(@APath[0])); - end; - end; -{$endif mswindows} - procedure DefaultReplacements(var s:ansistring); - {$ifdef mswindows} +{$ifdef mswindows} procedure ReplaceSpecialFolder(const MacroName: string; const ID: integer); begin // Only try to receive the special folders (and thus dynamically // load shfolder.dll) when that's needed. if pos(MacroName,s)>0 then - Replace(s,MacroName,GetSpecialDir(ID)); + Replace(s,MacroName,GetWindowsSpecialDir(ID)); end; - {$endif mswindows} +{$endif mswindows} var envstr: string; envvalue: pchar; @@ -1581,10 +1516,4 @@ implementation features:=[low(Tfeature)..high(Tfeature)]; end; -{$ifdef mswindows} -initialization -finalization - if CFGDLLHandle<>0 then - FreeLibrary(CFGDllHandle); -{$endif mswindows} end.