Browse Source

* fixed SysUtils.FindFirst/FindNext/FindClose on i8086-msdos in the compact and
large memory models by changing TSearchRec.FindHandle to a pointer (because
THandle is 16-bit on this platform and is thus not able to hold a far pointer
without truncating it)

git-svn-id: trunk@28451 -

nickysn 11 years ago
parent
commit
45ed066fed
2 changed files with 4 additions and 4 deletions
  1. 3 3
      rtl/msdos/sysutils.pp
  2. 1 1
      rtl/objpas/sysutils/filutilh.inc

+ 3 - 3
rtl/msdos/sysutils.pp

@@ -353,7 +353,7 @@ Var Sr : PSearchrec;
 begin
 begin
   //!! Sr := New(PSearchRec);
   //!! Sr := New(PSearchRec);
   getmem(sr,sizeof(searchrec));
   getmem(sr,sizeof(searchrec));
-  Rslt.FindHandle := longint(Sr);
+  Rslt.FindHandle := Sr;
   DOS.FindFirst(Path, Attr, Sr^);
   DOS.FindFirst(Path, Attr, Sr^);
   result := -DosError;
   result := -DosError;
   if result = 0 then
   if result = 0 then
@@ -388,7 +388,7 @@ begin
 end;
 end;
 
 
 
 
-Procedure InternalFindClose(var Handle: THandle);
+Procedure InternalFindClose(var Handle: Pointer);
 var
 var
   Sr: PSearchRec;
   Sr: PSearchRec;
 begin
 begin
@@ -400,7 +400,7 @@ begin
       DOS.FindClose(SR^);
       DOS.FindClose(SR^);
       freemem(sr,sizeof(searchrec));
       freemem(sr,sizeof(searchrec));
     end;
     end;
-  Handle := 0;
+  Handle := nil;
 end;
 end;
 
 
 
 

+ 1 - 1
rtl/objpas/sysutils/filutilh.inc

@@ -17,7 +17,7 @@ Type
 
 
 
 
   // Some operating systems need FindHandle to be a Pointer
   // Some operating systems need FindHandle to be a Pointer
-{$if defined(unix)}
+{$if defined(unix) or defined(msdos)}
     {$define FINDHANDLE_IS_POINTER}
     {$define FINDHANDLE_IS_POINTER}
 {$endif}
 {$endif}