From 1740525027eb049ed62fcef8795d57911e5f8d5f Mon Sep 17 00:00:00 2001 From: Tomas Hajny Date: Mon, 5 Mar 2007 00:17:27 +0000 Subject: [PATCH] + dynamically loaded 64-bit FS calls made available outside unit System git-svn-id: trunk@6723 - --- rtl/os2/sysfile.inc | 12 ++++++------ rtl/os2/sysos.inc | 8 +++----- rtl/os2/system.pas | 33 ++++++++++++++++++++++++++++++--- 3 files changed, 39 insertions(+), 14 deletions(-) diff --git a/rtl/os2/sysfile.inc b/rtl/os2/sysfile.inc index 9bb8c74235..530458fbb5 100644 --- a/rtl/os2/sysfile.inc +++ b/rtl/os2/sysfile.inc @@ -84,7 +84,7 @@ function Do_FilePos (Handle: THandle): int64; var PosActual: int64; begin - InOutRes := DosSetFilePtrL (Handle, 0, 1, PosActual); + InOutRes := Sys_DosSetFilePtrL (Handle, 0, 1, PosActual); Do_FilePos := PosActual; {$ifdef IODEBUG} writeln('do_filepos: handle=', Handle, ', actual_pos=', PosActual, ', InOutRes=', InOutRes); @@ -95,7 +95,7 @@ procedure Do_Seek (Handle: THandle; Pos: int64); var PosActual: int64; begin - InOutRes:=DosSetFilePtrL(Handle, Pos, 0 {ZeroBased}, PosActual); + InOutRes:=Sys_DosSetFilePtrL(Handle, Pos, 0 {ZeroBased}, PosActual); {$ifdef IODEBUG} writeln('do_seek: handle=', Handle, ', pos=', pos, ', actual_pos=', PosActual, ', InOutRes=', InOutRes); {$endif} @@ -105,7 +105,7 @@ function Do_SeekEnd (Handle: THandle): int64; var PosActual: int64; begin - InOutRes := DosSetFilePtrL (Handle, 0, 2 {EndBased}, PosActual); + InOutRes := Sys_DosSetFilePtrL (Handle, 0, 2 {EndBased}, PosActual); Do_SeekEnd := PosActual; {$ifdef IODEBUG} writeln('do_seekend: handle=', Handle, ', actual_pos=', PosActual, ', InOutRes=', InOutRes); @@ -123,7 +123,7 @@ end; procedure Do_Truncate (Handle: THandle; Pos: int64); begin - InOutRes := DosSetFileSizeL (Handle, Pos); + InOutRes := Sys_DosSetFileSizeL (Handle, Pos); Do_SeekEnd (Handle); end; @@ -221,12 +221,12 @@ begin Attrib:=32 {faArchive}; - InOutRes:=DosOpenL(p, FileRec(F).Handle, Action, 0, Attrib, OpenFlags, FM, nil); + InOutRes:=Sys_DosOpenL(p, FileRec(F).Handle, Action, 0, Attrib, OpenFlags, FM, nil); // If too many open files try to set more file handles and open again if (InOutRes = 4) then if Increase_File_Handle_Count then - InOutRes:=DosOpenL(p, FileRec(F).Handle, Action, 0, Attrib, OpenFlags, FM, nil); + InOutRes:=Sys_DosOpenL(p, FileRec(F).Handle, Action, 0, Attrib, OpenFlags, FM, nil); If InOutRes<>0 then FileRec(F).Handle:=UnusedHandle; diff --git a/rtl/os2/sysos.inc b/rtl/os2/sysos.inc index 9b42ca2bd7..afd77120e3 100644 --- a/rtl/os2/sysos.inc +++ b/rtl/os2/sysos.inc @@ -125,6 +125,8 @@ function DosGetDateTime(var Buf:TSysDateTime): cardinal; cdecl; external 'DOSCALLS' index 230; +{ +Already declared in interface part: type TDosOpenL = function (FileName: PChar; var Handle: THandle; var Action: cardinal; InitSize: int64; @@ -135,7 +137,7 @@ type var PosActual: int64): cardinal; cdecl; TDosSetFileSizeL = function (Handle: THandle; Size: int64): cardinal; cdecl; - +} function DummyDosOpenL (FileName: PChar; var Handle: THandle; var Action: cardinal; InitSize: int64; @@ -164,10 +166,6 @@ end; const - DosOpenL: TDosOpenL = @DummyDosOpenL; - DosSetFilePtrL: TDosSetFilePtrL = @DummyDosSetFilePtrL; - DosSetFileSizeL: TDosSetFileSizeL = @DummyDosSetFileSizeL; - OrdDosOpenL = 981; OrdDosSetFilePtrL = 988; OrdDosSetFileSizeL = 989; diff --git a/rtl/os2/system.pas b/rtl/os2/system.pas index 3052d79b5c..87f4293b75 100644 --- a/rtl/os2/system.pas +++ b/rtl/os2/system.pas @@ -153,6 +153,33 @@ procedure SetDefaultOS2FileType (FType: ShortString); procedure SetDefaultOS2Creator (Creator: ShortString); +type + TDosOpenL = function (FileName: PChar; var Handle: THandle; + var Action: cardinal; InitSize: int64; + Attrib, OpenFlags, FileMode: cardinal; + EA: pointer): cardinal; cdecl; + + TDosSetFilePtrL = function (Handle: THandle; Pos: int64; Method: cardinal; + var PosActual: int64): cardinal; cdecl; + + TDosSetFileSizeL = function (Handle: THandle; Size: int64): cardinal; cdecl; + + +function DummyDosOpenL (FileName: PChar; var Handle: THandle; + var Action: cardinal; InitSize: int64; + Attrib, OpenFlags, FileMode: cardinal; + EA: pointer): cardinal; cdecl; + +function DummyDosSetFilePtrL (Handle: THandle; Pos: int64; Method: cardinal; + var PosActual: int64): cardinal; cdecl; + +function DummyDosSetFileSizeL (Handle: THandle; Size: int64): cardinal; cdecl; + + +const + Sys_DosOpenL: TDosOpenL = @DummyDosOpenL; + Sys_DosSetFilePtrL: TDosSetFilePtrL = @DummyDosSetFilePtrL; + Sys_DosSetFileSizeL: TDosSetFileSizeL = @DummyDosSetFileSizeL; implementation @@ -750,15 +777,15 @@ begin begin if DosQueryProcAddr (DosCallsHandle, OrdDosOpenL, nil, P) = 0 then begin - DosOpenL := TDosOpenL (P); + Sys_DosOpenL := TDosOpenL (P); if DosQueryProcAddr (DosCallsHandle, OrdDosSetFilePtrL, nil, P) = 0 then begin - DosSetFilePtrL := TDosSetFilePtrL (P); + Sys_DosSetFilePtrL := TDosSetFilePtrL (P); if DosQueryProcAddr (DosCallsHandle, OrdDosSetFileSizeL, nil, P) = 0 then begin - DosSetFileSizeL := TDosSetFileSizeL (P); + Sys_DosSetFileSizeL := TDosSetFileSizeL (P); FSApi64 := true; end; end;