** Description changed:

  The eglibc netinet/in.h macros to deal with IPv6 address classes are
- broken in stricts conformance mode because they access symbols that are
+ broken in strict conformance mode because they access symbols that are
  not expose in strict conformance mode.
  
  The macros should be looking at s6_addr, rather than s6_addr32.
  
  Download the attached try.c and then see:
  
  : this is relaxed mode:
  $ gcc -c -Wall -Wextra -std=gnu99 /tmp/try.c -o /tmp/try.o
  (no console output -> success)
  
  : this is conformance mode (c99 instead of gnu99):
  $ LC_ALL=C gcc -c -Wall -Wextra -std=c99 /tmp/try.c -o /tmp/try.o
  /tmp/try.c: In function 'f':
  /tmp/try.c:5:18: error: 'const struct in6_addr' has no member named 
's6_addr32'
  /tmp/try.c:5:18: error: 'const struct in6_addr' has no member named 
's6_addr32'
  /tmp/try.c:5:18: error: 'const struct in6_addr' has no member named 
's6_addr32'
  
  Line numbers in try.c are:
  
-      1        #include <netinet/in.h>
-      2        
-      3        int f(void) {
-      4            struct sockaddr_in6 sa;
-      5            int result = IN6_IS_ADDR_V4MAPPED(&sa.sin6_addr);
-      6            return result;
-      7        }
+      1        #include <netinet/in.h>
+      2
+      3        int f(void) {
+      4            struct sockaddr_in6 sa;
+      5            int result = IN6_IS_ADDR_V4MAPPED(&sa.sin6_addr);
+      6            return result;
+      7        }
  
  POSIX:
  
-        The  <netinet/in.h>  header  shall  define the in6_addr structure that 
contains at
-        least the following member:
+        The  <netinet/in.h>  header  shall  define the in6_addr structure that 
contains at
+        least the following member:
  
-               uint8_t s6_addr[16]
+               uint8_t s6_addr[16]
  
  So s6_addr32 is unavailable in strict mode (this is deliberate through
  preprocessing inside in.h near line 209):
  
-    197        /* IPv6 address */
-    198        struct in6_addr
-    199          {
-    200            union
-    201              {
-    202                uint8_t __u6_addr8[16];
-    203        #if defined __USE_MISC || defined __USE_GNU
-    204                uint16_t __u6_addr16[8];
-    205                uint32_t __u6_addr32[4];
-    206        #endif
-    207              } __in6_u;
-    208        #define s6_addr                 __in6_u.__u6_addr8
-    209        #if defined __USE_MISC || defined __USE_GNU
-    210        # define s6_addr16              __in6_u.__u6_addr16
-    211        # define s6_addr32              __in6_u.__u6_addr32
-    212        #endif
-    213          };
-    214        
-  
+    197        /* IPv6 address */
+    198        struct in6_addr
+    199          {
+    200            union
+    201              {
+    202                uint8_t __u6_addr8[16];
+    203        #if defined __USE_MISC || defined __USE_GNU
+    204                uint16_t __u6_addr16[8];
+    205                uint32_t __u6_addr32[4];
+    206        #endif
+    207              } __in6_u;
+    208        #define s6_addr                 __in6_u.__u6_addr8
+    209        #if defined __USE_MISC || defined __USE_GNU
+    210        # define s6_addr16              __in6_u.__u6_addr16
+    211        # define s6_addr32              __in6_u.__u6_addr32
+    212        #endif
+    213          };
+    214
+ 
  Workaround:
  
- #define _GNU_SOURCE 
+ #define _GNU_SOURCE
  _before_ the very first #include line in the same compilation unit (.c file)
  
  ProblemType: Bug
  DistroRelease: Ubuntu 12.04
  Package: libc6-dev 2.15-0ubuntu10.4
  ProcVersionSignature: Ubuntu 3.2.0-45.70-generic 3.2.44
  Uname: Linux 3.2.0-45-generic x86_64
  NonfreeKernelModules: fglrx
  ApportVersion: 2.0.1-0ubuntu17.2
  Architecture: amd64
  Date: Tue Jun  4 10:30:53 2013
  MarkForUpload: True
  ProcEnviron:
-  LANGUAGE=de_DE:en
-  TERM=xterm
-  PATH=(custom, no user)
-  LANG=de_DE.UTF-8
-  SHELL=/bin/bash
+  LANGUAGE=de_DE:en
+  TERM=xterm
+  PATH=(custom, no user)
+  LANG=de_DE.UTF-8
+  SHELL=/bin/bash
  SourcePackage: eglibc
  UpgradeStatus: No upgrade log present (probably fresh install)

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1187301

Title:
  netinet/in.h address check macros such as IN6_IS_ADDR_V4MAPPED broken
  in strict conformance mode (gcc -std=c99)

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/eglibc/+bug/1187301/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to