[Ada] GNAT.Sockets: refactor Has_Sockaddr_Len
authorDmitriy Anisimkov <anisimko@adacore.com>
Mon, 1 Jul 2019 13:37:16 +0000 (13:37 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Mon, 1 Jul 2019 13:37:16 +0000 (13:37 +0000)
Use a field offset computation trick to avoid maintaining a list of
platforms.

2019-07-01  Dmitriy Anisimkov  <anisimko@adacore.com>

gcc/ada/

* gsocket.h (Has_Sockaddr_Len): Use the offset of sin_family offset in
the sockaddr_in structure to determine the existence of length field
before the sin_family.

From-SVN: r272877

gcc/ada/ChangeLog
gcc/ada/gsocket.h

index f2e8f39ff29bf16b97db706e78a735bc8b8376e0..90ee4f1dbf0d527c9999188305128b6d0bc81cf9 100644 (file)
@@ -1,3 +1,9 @@
+2019-07-01  Dmitriy Anisimkov  <anisimko@adacore.com>
+
+       * gsocket.h (Has_Sockaddr_Len): Use the offset of sin_family offset in
+       the sockaddr_in structure to determine the existence of length field
+       before the sin_family.
+
 2019-07-01  Ed Schonberg  <schonberg@adacore.com>
 
        * sem_prag.adb (Analyze_Pragma, case Weak_External): Pragma only
index 200edabaeed6e294c7fc611f56e1cd14f19380cf..1821b1b55d4b8244f473d3460147ccbc01b3e14f 100644 (file)
 
 #include <limits.h>
 #include <errno.h>
+#include <stddef.h>
 
 #if defined (__vxworks) && ! defined (__RTP__)
 #include <sys/times.h>
 # endif
 #endif
 
-#if defined (__FreeBSD__) || defined (__vxworks) || defined(__rtems__) \
- || defined (__DragonFly__) || defined (__NetBSD__) || defined (__OpenBSD__)
-# define Has_Sockaddr_Len 1
-#else
-# define Has_Sockaddr_Len 0
-#endif
+# define Has_Sockaddr_Len (offsetof(struct sockaddr_in, sin_family) != 0)
 
 #if !(defined (_WIN32) || defined (__hpux__) || defined (VMS))
 # define HAVE_INET_PTON