]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
bits/socket.h: Update to recent BSD definition
authorSamuel Thibault <samuel.thibault@ens-lyon.org>
Wed, 1 Jan 2025 21:07:42 +0000 (22:07 +0100)
committerSamuel Thibault <samuel.thibault@ens-lyon.org>
Wed, 1 Jan 2025 21:11:13 +0000 (22:11 +0100)
The old BSD 4.4 definition (not used by Linux) was not 64b-proof: the
cmsg_data field is supposed to CMSG_ALIGN'ed (as can be also seen in the
CMSG_LEN macro).

Suggested-by: Diego Nieto Cid <dnietoc@gmail.com>
bits/socket.h
sysdeps/mach/hurd/bits/socket.h

index 62276fb49d228c2955342f85bdfd301536bfc94f..e83ad5bc01a22058cf0299b03c11d6e0b4d3946a 100644 (file)
@@ -221,17 +221,13 @@ struct cmsghdr
                                   of cmsghdr structure.  */
     int cmsg_level;            /* Originating protocol.  */
     int cmsg_type;             /* Protocol specific type.  */
-#if __glibc_c99_flexarr_available
-    __extension__ unsigned char __cmsg_data __flexarr; /* Ancillary data.  */
-#endif
+ /* This field is to be aligned with CMSG_ALIGN */
+ /* __extension__ unsigned char __cmsg_data __flexarr; */ /* Ancillary data.  */
   };
 
 /* Ancillary data object manipulation macros.  */
-#if __glibc_c99_flexarr_available
-# define CMSG_DATA(cmsg) ((cmsg)->__cmsg_data)
-#else
-# define CMSG_DATA(cmsg) ((unsigned char *) ((struct cmsghdr *) (cmsg) + 1))
-#endif
+#define CMSG_DATA(cmsg) \
+  ((unsigned char *) (cmsg) + CMSG_ALIGN (sizeof (struct cmsghdr)))
 
 #define CMSG_NXTHDR(mhdr, cmsg) __cmsg_nxthdr (mhdr, cmsg)
 
index 01af80231aed5af27479908e3cf97d1ba0b1cf6a..8c18cef579dac894cb74735e6fba9aa61a64f47f 100644 (file)
@@ -228,17 +228,13 @@ struct cmsghdr
                                   of cmsghdr structure.  */
     int cmsg_level;            /* Originating protocol.  */
     int cmsg_type;             /* Protocol specific type.  */
-#if __glibc_c99_flexarr_available
-    __extension__ unsigned char __cmsg_data __flexarr; /* Ancillary data.  */
-#endif
+ /* This field is to be aligned with CMSG_ALIGN */
+ /* __extension__ unsigned char __cmsg_data __flexarr; */ /* Ancillary data.  */
   };
 
 /* Ancillary data object manipulation macros.  */
-#if __glibc_c99_flexarr_available
-# define CMSG_DATA(cmsg) ((cmsg)->__cmsg_data)
-#else
-# define CMSG_DATA(cmsg) ((unsigned char *) ((struct cmsghdr *) (cmsg) + 1))
-#endif
+#define CMSG_DATA(cmsg) \
+  ((unsigned char *) (cmsg) + CMSG_ALIGN (sizeof (struct cmsghdr)))
 
 #define CMSG_NXTHDR(mhdr, cmsg) __cmsg_nxthdr (mhdr, cmsg)