Pārlūkot izejas kodu

* Use GetWindowsSpecialDir from the new windirs unit

git-svn-id: trunk@17135 -
joost 14 gadi atpakaļ
vecāks
revīzija
2df0ef4937
1 mainītis faili ar 6 papildinājumiem un 77 dzēšanām
  1. 6 77
      compiler/globals.pas

+ 6 - 77
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 (pathLength<MAX_PATH-14) then { 14=length('\shfolder.dll'#0) }
-           begin
-             StrLCopy(@pathBuf[pathLength],'\shfolder.dll',MAX_PATH-pathLength-1);
-             CFGDLLHandle:=LoadLibrary(pathBuf);
-             if (CFGDLLHandle<>0) 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.