[fpc-devel] Some more THandle problems
Sergei Gorelkin
sergei_gorelkin at mail.ru
Sat Nov 20 14:13:02 CET 2010
Sven Barth пишет:
> Hello together!
>
> While getting SysUtils and Classes to compile for Native NT I've
> stumbled upon some more spots where Handle=LongInt/LongWord is assumed.
>
> 1. In objpas/sysutils/filutilh.inc and its implementation
> objpas/sysutils/fina.inc the GetFileHandle functions are defined with
> return type LongInt, but TFileRec.Handle and TFileRec.Handle are defined
> as THandle (which is - as we know - QWord on Win64).
>
> 2. THandleStream has a field FHandle which is defined as Integer. Now
> this handle is filled either by the constructor which takes an Integer
> as well or by e.g. TFileStream which gets its handle from
> FileOpen/FileCreate. Those return a THandle and you might guess what
> happens if a value >= 2^32 is returned. ^^
>
1 and 2 fixed in rev. 16383
> 3. The handle types for resource streams are defined as PtrUInt while
> the handle for Native NT is defined as Pointer.
> For me locally I've fixed this my casting the handles to the FPResource*
> types, but I might have reached the point where I should change my
> handle type from Pointer to PtrUInt, because the pros (no more Ordinal
> <-> Pointer conflicts) outweigh the cons (no more strict following of
> the ReactOS headers).
>
As long as you use a dedicated type like THandle everywhere, redefining it should be no trouble.
The problem is to spot places where such type is intermixed with other types.
> I can provide patches for 1 and 2 in bug reports if you want, but I
> won't touch the resource related parts mentioned in 3 cause those issues
> will be fixed when I provide my patch for the Native NT RTL (by changing
> THandle from Pointer to PtrUInt).
>
> But I've discovered some nice THandle problems while THandle was defined
> as Pointer. :D
>
Indeed, these small bits make up the big picture. Thank you!
Sergei
More information about the fpc-devel
mailing list