Despite the "dw" prefix on the name, the dwNumberOfBytesToMap argument
to MapViewOfFile was changed from DWORD to SIZE_T when 64bit Windows
came about.

This change adjusts the binding we have for it in System.Win32
accordingly. For consistency with established practice, an s-win32
specific version of size_t is introduced and g-sercom__mingw.adb is
adjusted to disambiguate between this new size_t and the one already
exposed in System.CRTL.

Tested on x86_64-pc-linux-gnu, committed on trunk

2019-08-13  Olivier Hainque  <hain...@adacore.com>

gcc/ada/

        * libgnat/s-win32.ads: Define size_t and fix the MapViewOfFile
        binding to use it instead of DWORD for the dwNumberOfBytesToMap
        argument.
        * libgnat/g-sercom__mingw.adb (Read): State which definition of
        size_t to fetch in call to Last_Index.
--- gcc/ada/libgnat/g-sercom__mingw.adb
+++ gcc/ada/libgnat/g-sercom__mingw.adb
@@ -167,7 +167,7 @@ package body GNAT.Serial_Communications is
          Raise_Error ("read error");
       end if;
 
-      Last := Last_Index (Buffer'First, size_t (Read_Last));
+      Last := Last_Index (Buffer'First, CRTL.size_t (Read_Last));
    end Read;
 
    ---------

--- gcc/ada/libgnat/s-win32.ads
+++ gcc/ada/libgnat/s-win32.ads
@@ -63,6 +63,7 @@ package System.Win32 is
    type BYTE   is new Interfaces.C.unsigned_char;
    type LONG   is new Interfaces.C.long;
    type CHAR   is new Interfaces.C.char;
+   type SIZE_T is new Interfaces.C.size_t;
 
    type BOOL   is new Interfaces.C.int;
    for BOOL'Size use Interfaces.C.int'Size;
@@ -238,7 +239,7 @@ package System.Win32 is
       dwDesiredAccess      : DWORD;
       dwFileOffsetHigh     : DWORD;
       dwFileOffsetLow      : DWORD;
-      dwNumberOfBytesToMap : DWORD) return System.Address;
+      dwNumberOfBytesToMap : SIZE_T) return System.Address;
    pragma Import (Stdcall, MapViewOfFile, "MapViewOfFile");
 
    function UnmapViewOfFile (lpBaseAddress : System.Address) return BOOL;

Reply via email to