diff --git a/rtl/objpas/sysutils/sysutils.inc b/rtl/objpas/sysutils/sysutils.inc index fa4ee54c83..5dd3d71aab 100644 --- a/rtl/objpas/sysutils/sysutils.inc +++ b/rtl/objpas/sysutils/sysutils.inc @@ -518,30 +518,40 @@ end; Diskh functions, OS independent. ---------------------------------------------------------------------} - function ForceDirectories(Const Dir: string): Boolean; var E: EInOutError; - ADir : String; + ADrv : String; +function DoForceDirectories(Const Dir: string): Boolean; +var + ADir : String; begin Result:=True; ADir:=ExcludeTrailingPathDelimiter(Dir); - if (ADir='') then - begin - E:=EInOutError.Create(SCannotCreateEmptyDir); - E.ErrorCode:=3; - Raise E; - end; + if (ADir='') then Exit; if Not DirectoryExists(ADir) then begin - Result:=ForceDirectories(ExtractFilePath(ADir)); + Result:=DoForceDirectories(ExtractFilePath(ADir)); If Result then - CreateDir(ADir); + Result := CreateDir(ADir); end; end; +begin + Result := False; + ADrv := ExtractFileDrive(Dir); + if (ADrv<>'') and (not DirectoryExists(ADrv)) then Exit; + if Dir='' then + begin + E:=EInOutError.Create(SCannotCreateEmptyDir); + E.ErrorCode:=3; + Raise E; + end; + Result := DoForceDirectories(Dir); +end; + Procedure GetRandomBytes(Var Buf; NBytes : Integer); Var