aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2025-01-01 22:07:42 +0100
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2025-01-01 22:11:13 +0100
commitcf13f740a91b5bbf6bb60a30b45c2a3933ff1259 (patch)
tree9a8e68c0bde75f36439eaf4740c0fba45f9f1a35
parent6e177ca635f5879eb35573f3c199b1c14e978ab7 (diff)
downloadglibc-cf13f740a91b5bbf6bb60a30b45c2a3933ff1259.zip
glibc-cf13f740a91b5bbf6bb60a30b45c2a3933ff1259.tar.gz
glibc-cf13f740a91b5bbf6bb60a30b45c2a3933ff1259.tar.bz2
bits/socket.h: Update to recent BSD definition
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>
-rw-r--r--bits/socket.h12
-rw-r--r--sysdeps/mach/hurd/bits/socket.h12
2 files changed, 8 insertions, 16 deletions
diff --git a/bits/socket.h b/bits/socket.h
index 62276fb..e83ad5b 100644
--- a/bits/socket.h
+++ b/bits/socket.h
@@ -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)
diff --git a/sysdeps/mach/hurd/bits/socket.h b/sysdeps/mach/hurd/bits/socket.h
index 01af802..8c18cef 100644
--- a/sysdeps/mach/hurd/bits/socket.h
+++ b/sysdeps/mach/hurd/bits/socket.h
@@ -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)