Ver código fonte

+ dynamically loaded 64-bit FS calls made available outside unit System

git-svn-id: trunk@6723 -
Tomas Hajny 18 anos atrás
pai
commit
1740525027
3 arquivos alterados com 39 adições e 14 exclusões
  1. 6 6
      rtl/os2/sysfile.inc
  2. 3 5
      rtl/os2/sysos.inc
  3. 30 3
      rtl/os2/system.pas

+ 6 - 6
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;
 

+ 3 - 5
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;

+ 30 - 3
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;