Browse Source

fixed structure sizes for any slang on 32 bit platform,
fiexed buggy conversions from c-short to pascal-integer,
needs some more work to be Win64 compliant,
szDescription/szSystemStatus is a zero terminated string with extra zero.

alex 25 years ago
parent
commit
ec5ee74a21
1 changed files with 36 additions and 24 deletions
  1. 36 24
      rtl/win32/winsock.pp

+ 36 - 24
rtl/win32/winsock.pp

@@ -15,7 +15,7 @@
 
 
  **********************************************************************}
  **********************************************************************}
 
 
-{$PACKRECORDS 4}
+{$PACKRECORDS 1}
 unit winsock;
 unit winsock;
 
 
   interface
   interface
@@ -96,9 +96,9 @@ unit winsock;
           { alias list  }
           { alias list  }
           h_aliases: ^pchar;
           h_aliases: ^pchar;
           { host address type  }
           { host address type  }
-          h_addrtype: integer;
+          h_addrtype: SmallInt;
           { length of address  }
           { length of address  }
-          h_length: integer;
+          h_length: SmallInt;
           { list of addresses  }
           { list of addresses  }
           case byte of
           case byte of
              0: (h_addr_list: ^pchar);
              0: (h_addr_list: ^pchar);
@@ -117,7 +117,8 @@ unit winsock;
           { alias list  }
           { alias list  }
           n_aliases : ^pchar;
           n_aliases : ^pchar;
           { net address type  }
           { net address type  }
-          n_addrtype : integer;
+          n_addrtype : SmallInt;
+          n_pad1 : SmallInt;    { ensure right packaging }
           { network #  }
           { network #  }
           n_net : u_long;
           n_net : u_long;
        end;
        end;
@@ -130,7 +131,8 @@ unit winsock;
           { alias list  }
           { alias list  }
           s_aliases : ^pchar;
           s_aliases : ^pchar;
           { port #  }
           { port #  }
-          s_port : integer;
+          s_port : SmallInt;
+          n_pad1 : SmallInt;    { ensure right packaging }
           { protocol to use  }
           { protocol to use  }
           s_proto : ^char;
           s_proto : ^char;
        end;
        end;
@@ -143,7 +145,8 @@ unit winsock;
           { alias list  }
           { alias list  }
           p_aliases : ^pchar;
           p_aliases : ^pchar;
           { protocol #  }
           { protocol #  }
-          p_proto : integer;
+          p_proto : SmallInt;
+          p_pad1 : SmallInt;    { ensure packaging }
        end;
        end;
        TProtoEnt = protoent;
        TProtoEnt = protoent;
        PProtoEnt = ^TProtoEnt;
        PProtoEnt = ^TProtoEnt;
@@ -214,13 +217,15 @@ unit winsock;
        PInAddr = ^TInAddr;
        PInAddr = ^TInAddr;
 
 
        sockaddr_in = record
        sockaddr_in = record
-          sin_family : u_short;
+          sin_family : SmallInt;                        (* 2 byte *)
           case integer of
           case integer of
-             0 : (sin_port : u_short;
-                  sin_addr : TInAddr;
-                  sin_zero : array[0..7] of char;
+             0 : ( (* equals to sockaddr_in, size is 16 byte *)
+                  sin_port : u_short;                   (* 2 byte *)
+                  sin_addr : TInAddr;                   (* 4 byte *)
+                  sin_zero : array[0..8-1] of char;     (* 8 byte *)
                  );
                  );
-             1 : (sin_data : array[0..13] of char;
+             1 : ( (* equals to sockaddr, size is 16 byte *)
+                  sin_data : array[0..14-1] of char;    (* 14 byte *)
                  );
                  );
          end;
          end;
        TSockAddrIn = sockaddr_in;
        TSockAddrIn = sockaddr_in;
@@ -251,14 +256,15 @@ unit winsock;
 
 
     type
     type
        WSADATA = record
        WSADATA = record
-          wVersion : WORD;
-          wHighVersion : WORD;
-          szDescription : array[0..WSADESCRIPTION_LEN-1] of char;
-          szSystemStatus : array[0..WSASYS_STATUS_LEN-1] of char;
-          iMaxSockets : word;
-          iMaxUdpDg : word;
-          lpVendorInfo : pchar;
-       end;
+          wVersion : WORD;              { 2 byte, ofs 0 }
+          wHighVersion : WORD;          { 2 byte, ofs 2 }
+          szDescription : array[0..(WSADESCRIPTION_LEN+1)-1] of char; { 257 byte, ofs 4 }
+          szSystemStatus : array[0..(WSASYS_STATUS_LEN+1)-1] of char; { 129 byte, ofs 261 }
+          iMaxSockets : word;           { 2 byte, ofs 390 }
+          iMaxUdpDg : word;             { 2 byte, ofs 392 }
+          pad1 : SmallInt;              { 2 byte, ofs 394 } { ensure right packaging }
+          lpVendorInfo : pchar;         { 4 byte, ofs 396 }
+       end;                             { total size 400 }
        TWSAData = WSADATA;
        TWSAData = WSADATA;
        PWSAData = TWSAData;
        PWSAData = TWSAData;
 
 
@@ -725,8 +731,8 @@ unit winsock;
 
 
     procedure GetAcceptExSockaddrs(lpOutputBuffer:Pointer;
     procedure GetAcceptExSockaddrs(lpOutputBuffer:Pointer;
                                    dwReceiveDataLength,dwLocalAddressLength,dwRemoteAddressLength:dword;
                                    dwReceiveDataLength,dwLocalAddressLength,dwRemoteAddressLength:dword;
-                                   var LocalSockaddr:TSockAddr; var LocalSockaddrLength:Integer;
-                                   var RemoteSockaddr:TSockAddr; var RemoteSockaddrLength:Integer);stdcall;
+                                   var LocalSockaddr:TSockAddr; var LocalSockaddrLength:LongInt;
+                                   var RemoteSockaddr:TSockAddr; var RemoteSockaddrLength:LongInt);stdcall;
 
 
     function WSAMakeSyncReply(Buflen,Error:Word):dword;
     function WSAMakeSyncReply(Buflen,Error:Word):dword;
     function WSAMakeSelectReply(Event,Error:Word):dword;
     function WSAMakeSelectReply(Event,Error:Word):dword;
@@ -836,8 +842,8 @@ unit winsock;
 
 
     procedure GetAcceptExSockaddrs(lpOutputBuffer:Pointer;
     procedure GetAcceptExSockaddrs(lpOutputBuffer:Pointer;
                                    dwReceiveDataLength,dwLocalAddressLength,dwRemoteAddressLength:dword;
                                    dwReceiveDataLength,dwLocalAddressLength,dwRemoteAddressLength:dword;
-                                   var LocalSockaddr:TSockAddr; var LocalSockaddrLength:Integer;
-                                   var RemoteSockaddr:TSockAddr; var RemoteSockaddrLength:Integer);stdcall;
+                                   var LocalSockaddr:TSockAddr; var LocalSockaddrLength:LongInt;
+                                   var RemoteSockaddr:TSockAddr; var RemoteSockaddrLength:LongInt);stdcall;
                                    external winsockdll name 'GetAcceptExSockaddrs';
                                    external winsockdll name 'GetAcceptExSockaddrs';
 
 
     {
     {
@@ -927,7 +933,13 @@ unit winsock;
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.7  2000-02-23 15:00:55  jonas
+  Revision 1.8  2000-02-23 16:48:10  alex
+  fixed structure sizes for any slang on 32 bit platform,
+  fiexed buggy conversions from c-short to pascal-integer,
+  needs some more work to be Win64 compliant,
+  szDescription/szSystemStatus is a zero terminated string with extra zero.
+
+  Revision 1.7  2000/02/23 15:00:55  jonas
     * fixed WSADATA record structure bug
     * fixed WSADATA record structure bug
 
 
   Revision 1.6  2000/02/20 20:34:02  florian
   Revision 1.6  2000/02/20 20:34:02  florian