aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada
diff options
context:
space:
mode:
authorPierre-Marie de Rodat <pmderodat@gcc.gnu.org>2019-03-22 13:59:02 +0000
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>2019-03-22 13:59:02 +0000
commit29e0246c68efd4b68f9593ff26b3c123fb05161d (patch)
treed8fc70816991d4f49a5255aa5fe952ed585e5ff1 /gcc/ada
parentb6c5f9f3dd489efa345175c8ac1352fa2849d32c (diff)
downloadgcc-29e0246c68efd4b68f9593ff26b3c123fb05161d.zip
gcc-29e0246c68efd4b68f9593ff26b3c123fb05161d.tar.gz
gcc-29e0246c68efd4b68f9593ff26b3c123fb05161d.tar.bz2
[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
Diffstat (limited to 'gcc/ada')
-rw-r--r--gcc/ada/ChangeLog8
-rw-r--r--gcc/ada/libgnat/g-socket.adb13
2 files changed, 14 insertions, 7 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 6cb5389..81b5db9 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -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
diff --git a/gcc/ada/libgnat/g-socket.adb b/gcc/ada/libgnat/g-socket.adb
index c0b3079..476a213 100644
--- a/gcc/ada/libgnat/g-socket.adb
+++ b/gcc/ada/libgnat/g-socket.adb
@@ -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;