[Ada] GNAT.Sockets: fix recent regressions
The support for IPv6 that was added since last release triggered regressions on various platforms. The size of structures passed to low level routines was not correct anymore: it should depend on the address family, now. 2019-03-22 Dmitriy Anisimkov <anisimko@adacore.com> gcc/ada/ PR ada/89583 * libgnat/g-socket.adb (Bind_Socket, Connect_Socket, Send_Socket): Fix the computation of structure lengths passed to low level routines. (Is_IPv6_Address): Fix the number of expected colons. 2019-03-22 Simon Wright <simon@pushface.org> gcc/testsuite/ PR ada/89583 * gnat.dg/socket2.adb: New. From-SVN: r269873
This commit is contained in:
parent
b6c5f9f3dd
commit
29e0246c68
@ -1,3 +1,11 @@
|
||||
2019-03-22 Dmitriy Anisimkov <anisimko@adacore.com>
|
||||
|
||||
PR ada/89583
|
||||
* libgnat/g-socket.adb (Bind_Socket, Connect_Socket,
|
||||
Send_Socket): Fix the computation of structure lengths passed to
|
||||
low level routines.
|
||||
(Is_IPv6_Address): Fix the number of expected colons.
|
||||
|
||||
2019-03-11 Martin Liska <mliska@suse.cz>
|
||||
|
||||
* gcc-interface/misc.c (gnat_post_options): Wrap option name in string
|
||||
|
@ -461,12 +461,12 @@ package body GNAT.Sockets is
|
||||
is
|
||||
Res : C.int;
|
||||
Sin : aliased Sockaddr;
|
||||
Len : constant C.int := Sin'Size / 8;
|
||||
|
||||
begin
|
||||
Set_Address (Sin'Unchecked_Access, Address);
|
||||
|
||||
Res := C_Bind (C.int (Socket), Sin'Address, Len);
|
||||
Res := C_Bind
|
||||
(C.int (Socket), Sin'Address, C.int (Lengths (Address.Family)));
|
||||
|
||||
if Res = Failure then
|
||||
Raise_Socket_Error (Socket_Errno);
|
||||
@ -666,12 +666,11 @@ package body GNAT.Sockets is
|
||||
Server : Sock_Addr_Type) return C.int
|
||||
is
|
||||
Sin : aliased Sockaddr;
|
||||
Len : constant C.int := Sin'Size / 8;
|
||||
|
||||
begin
|
||||
Set_Address (Sin'Unchecked_Access, Server);
|
||||
|
||||
return C_Connect (C.int (Socket), Sin'Address, Len);
|
||||
return C_Connect
|
||||
(C.int (Socket), Sin'Address, C.int (Lengths (Server.Family)));
|
||||
end Connect_Socket;
|
||||
|
||||
procedure Connect_Socket
|
||||
@ -1794,7 +1793,7 @@ package body GNAT.Sockets is
|
||||
end if;
|
||||
end loop;
|
||||
|
||||
return Colons <= 7;
|
||||
return Colons <= 8;
|
||||
end Is_IPv6_Address;
|
||||
|
||||
---------------------
|
||||
@ -2403,7 +2402,7 @@ package body GNAT.Sockets is
|
||||
if To /= null then
|
||||
Set_Address (Sin'Unchecked_Access, To.all);
|
||||
C_To := Sin'Address;
|
||||
Len := Sin'Size / 8;
|
||||
Len := C.int (Thin_Common.Lengths (To.Family));
|
||||
|
||||
else
|
||||
C_To := System.Null_Address;
|
||||
|
@ -1,3 +1,8 @@
|
||||
2019-03-22 Simon Wright <simon@pushface.org>
|
||||
|
||||
PR ada/89583
|
||||
* gnat.dg/socket2.adb: New.
|
||||
|
||||
2019-03-22 Bill Schmidt <wschmidt@linux.ibm.com>
|
||||
|
||||
* gcc.target/powerpc/mmx-psubd-2.c: Test _m_psubd.
|
||||
|
16
gcc/testsuite/gnat.dg/socket2.adb
Normal file
16
gcc/testsuite/gnat.dg/socket2.adb
Normal file
@ -0,0 +1,16 @@
|
||||
-- { dg-do run }
|
||||
with GNAT.Sockets;
|
||||
procedure Socket2 is
|
||||
Address : GNAT.Sockets.Sock_Addr_Type;
|
||||
Server_Socket : GNAT.Sockets.Socket_Type;
|
||||
begin
|
||||
Address.Addr := GNAT.Sockets.Any_Inet_Addr;
|
||||
Address.Port := 16#1234#;
|
||||
GNAT.Sockets.Create_Socket (Server_Socket);
|
||||
GNAT.Sockets.Set_Socket_Option
|
||||
(Server_Socket,
|
||||
GNAT.Sockets.Socket_Level,
|
||||
(GNAT.Sockets.Reuse_Address, True));
|
||||
GNAT.Sockets.Bind_Socket (Server_Socket, Address);
|
||||
GNAT.Sockets.Close_Socket (Server_Socket);
|
||||
end Socket2;
|
Loading…
Reference in New Issue
Block a user