aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Anisimkov <anisimko@adacore.com>2019-07-01 13:34:34 +0000
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>2019-07-01 13:34:34 +0000
commit7c46e926fa592e2df23d260791cde72162bfc10c (patch)
tree1cba8c7d6e49d20c7ebc3a405c55be10510f0600
parent6a04c943908a9302683dd16b59fc72419ebd54b0 (diff)
downloadgcc-7c46e926fa592e2df23d260791cde72162bfc10c.zip
gcc-7c46e926fa592e2df23d260791cde72162bfc10c.tar.gz
gcc-7c46e926fa592e2df23d260791cde72162bfc10c.tar.bz2
[Ada] GNAT.Sockets: fix Get_Address when AF_INET6 is not defined
2019-07-01 Dmitriy Anisimkov <anisimko@adacore.com> gcc/ada/ * libgnat/g-sothco.adb (Get_Address): Fix the case when AF_INET6 is not defined. From-SVN: r272856
-rw-r--r--gcc/ada/ChangeLog5
-rw-r--r--gcc/ada/libgnat/g-sothco.adb9
2 files changed, 10 insertions, 4 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 82e808b..1d353e8 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,8 @@
+2019-07-01 Dmitriy Anisimkov <anisimko@adacore.com>
+
+ * libgnat/g-sothco.adb (Get_Address): Fix the case when AF_INET6
+ is not defined.
+
2019-07-01 Ed Schonberg <schonberg@adacore.com>
* exp_attr.adb (Expand_Attribute_Reference, case Invalid_Value):
diff --git a/gcc/ada/libgnat/g-sothco.adb b/gcc/ada/libgnat/g-sothco.adb
index df82d01..eb15ac2 100644
--- a/gcc/ada/libgnat/g-sothco.adb
+++ b/gcc/ada/libgnat/g-sothco.adb
@@ -59,14 +59,15 @@ package body GNAT.Sockets.Thin_Common is
-----------------
function Get_Address (Sin : Sockaddr) return Sock_Addr_Type is
+ use type C.unsigned_short;
Family : constant C.unsigned_short :=
(if SOSC.Has_Sockaddr_Len = 0 then Sin.Sin_Family.Short_Family
else C.unsigned_short (Sin.Sin_Family.Char_Family));
+ AF_INET6_Defined : constant Boolean := SOSC.AF_INET6 > 0;
Result : Sock_Addr_Type
- (case Family is
- when SOSC.AF_INET6 => Family_Inet6,
- when SOSC.AF_INET => Family_Inet,
- when others => Family_Unspec);
+ (if AF_INET6_Defined and then SOSC.AF_INET6 = Family then Family_Inet6
+ elsif SOSC.AF_INET = Family then Family_Inet
+ else Family_Unspec);
begin
Result.Port := Port_Type (Network_To_Short (Sin.Sin_Port));