This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Hi!
If we declare __cmsg_data field with __flexarr on non-GCC pre-C99 compiler,
it will be __cmsg_data[1], CMSG_DATA macro will expand to
((struct cmsghdr *) (cmsg) + 1)) where struct cmsghdr will have wrong size
because __flexarr is non-zero size array.
This patch should fix it by only defining __cmsg_data field if __flexarr
will have zero size and using the same condition to choose between CMSG_DATA
definitions.
Other solution is to kill the __GNUC__ >= 2 || __STDC_VERSION__ >= 199901L
variants, not use __flexarr at all and have just one CMSG_DATA definition.
But with __cmsg_data it is probably more clear what the intent is.
2001-09-25 Jakub Jelinek <jakub@redhat.com>
* sysdeps/unix/bsd/bsd4.4/bits/socket.h (struct cmsghdr): Don't
declare __cmsg_data field if its size would be bigger than 0.
(CMSG_DATA): Adjust accordingly.
* sysdeps/unix/sysv/aix/bits/socket.h: Likewise.
* sysdeps/unix/sysv/linux/alpha/bits/socket.h: Likewise.
* sysdeps/unix/sysv/linux/ia64/bits/socket.h: Likewise.
* sysdeps/unix/sysv/linux/s390/s390-64/bits/socket.h: Likewise.
* sysdeps/unix/sysv/linux/bits/socket.h: Likewise.
* sysdeps/unix/sysv/linux/mips/bits/socket.h: Likewise.
* sysdeps/unix/sysv/linux/sparc/bits/socket.h: Likewise.
--- libc/sysdeps/unix/bsd/bsd4.4/bits/socket.h.jj Thu Aug 23 00:29:39 2001
+++ libc/sysdeps/unix/bsd/bsd4.4/bits/socket.h Tue Sep 25 13:28:46 2001
@@ -199,12 +199,13 @@ struct cmsghdr
of cmsghdr structure. */
int cmsg_level; /* Originating protocol. */
int cmsg_type; /* Protocol specific type. */
+#if (!defined __STRICT_ANSI__ && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L
__extension__ unsigned char __cmsg_data __flexarr; /* Ancillary data. */
- /* XXX Perhaps this should be removed. */
+#endif
};
/* Ancillary data object manipulation macros. */
-#if !defined __STRICT_ANSI__ && defined __GNUC__ && __GNUC__ >= 2
+#if (!defined __STRICT_ANSI__ && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L
# define CMSG_DATA(cmsg) ((cmsg)->__cmsg_data)
#else
# define CMSG_DATA(cmsg) ((unsigned char *) ((struct cmsghdr *) (cmsg) + 1))
--- libc/sysdeps/unix/sysv/aix/bits/socket.h.jj Thu Aug 23 18:50:40 2001
+++ libc/sysdeps/unix/sysv/aix/bits/socket.h Tue Sep 25 13:32:22 2001
@@ -203,14 +203,13 @@ struct cmsghdr
of cmsghdr structure. */
int cmsg_level; /* Originating protocol. */
int cmsg_type; /* Protocol specific type. */
-#if !defined __STRICT_ANSI__ && defined __GNUC__ && __GNUC__ >= 2
- unsigned char __cmsg_data[0]; /* Ancillary data. */
- /* XXX Perhaps this should be removed. */
+#if (!defined __STRICT_ANSI__ && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L
+ __extension__ unsigned char __cmsg_data __flexarr; /* Ancillary data. */
#endif
};
/* Ancillary data object manipulation macros. */
-#if !defined __STRICT_ANSI__ && defined __GNUC__ && __GNUC__ >= 2
+#if (!defined __STRICT_ANSI__ && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L
# define CMSG_DATA(cmsg) ((cmsg)->__cmsg_data)
#else
# define CMSG_DATA(cmsg) ((unsigned char *) ((struct cmsghdr *) (cmsg) + 1))
--- libc/sysdeps/unix/sysv/linux/alpha/bits/socket.h.jj Thu Aug 23 18:50:48 2001
+++ libc/sysdeps/unix/sysv/linux/alpha/bits/socket.h Tue Sep 25 13:30:04 2001
@@ -233,12 +233,13 @@ struct cmsghdr
of cmsghdr structure. */
int cmsg_level; /* Originating protocol. */
int cmsg_type; /* Protocol specific type. */
+#if (!defined __STRICT_ANSI__ && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L
__extension__ unsigned char __cmsg_data __flexarr; /* Ancillary data. */
- /* XXX Perhaps this should be removed. */
+#endif
};
/* Ancillary data object manipulation macros. */
-#if !defined __STRICT_ANSI__ && defined __GNUC__ && __GNUC__ >= 2
+#if (!defined __STRICT_ANSI__ && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L
# define CMSG_DATA(cmsg) ((cmsg)->__cmsg_data)
#else
# define CMSG_DATA(cmsg) ((unsigned char *) ((struct cmsghdr *) (cmsg) + 1))
--- libc/sysdeps/unix/sysv/linux/ia64/bits/socket.h.jj Thu Aug 23 18:51:06 2001
+++ libc/sysdeps/unix/sysv/linux/ia64/bits/socket.h Tue Sep 25 13:30:40 2001
@@ -233,12 +233,13 @@ struct cmsghdr
of cmsghdr structure. */
int cmsg_level; /* Originating protocol. */
int cmsg_type; /* Protocol specific type. */
+#if (!defined __STRICT_ANSI__ && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L
__extension__ unsigned char __cmsg_data __flexarr; /* Ancillary data. */
- /* XXX Perhaps this should be removed. */
+#endif
};
/* Ancillary data object manipulation macros. */
-#if !defined __STRICT_ANSI__ && defined __GNUC__ && __GNUC__ >= 2
+#if (!defined __STRICT_ANSI__ && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L
# define CMSG_DATA(cmsg) ((cmsg)->__cmsg_data)
#else
# define CMSG_DATA(cmsg) ((unsigned char *) ((struct cmsghdr *) (cmsg) + 1))
--- libc/sysdeps/unix/sysv/linux/s390/s390-64/bits/socket.h.jj Thu Aug 23 18:51:29 2001
+++ libc/sysdeps/unix/sysv/linux/s390/s390-64/bits/socket.h Tue Sep 25 13:31:03 2001
@@ -233,12 +233,13 @@ struct cmsghdr
of cmsghdr structure. */
int cmsg_level; /* Originating protocol. */
int cmsg_type; /* Protocol specific type. */
+#if (!defined __STRICT_ANSI__ && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L
__extension__ unsigned char __cmsg_data __flexarr; /* Ancillary data. */
- /* XXX Perhaps this should be removed. */
+#endif
};
/* Ancillary data object manipulation macros. */
-#if !defined __STRICT_ANSI__ && defined __GNUC__ && __GNUC__ >= 2
+#if (!defined __STRICT_ANSI__ && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L
# define CMSG_DATA(cmsg) ((cmsg)->__cmsg_data)
#else
# define CMSG_DATA(cmsg) ((unsigned char *) ((struct cmsghdr *) (cmsg) + 1))
--- libc/sysdeps/unix/sysv/linux/bits/socket.h.jj Thu Aug 23 18:50:53 2001
+++ libc/sysdeps/unix/sysv/linux/bits/socket.h Tue Sep 25 13:31:27 2001
@@ -233,12 +233,13 @@ struct cmsghdr
of cmsghdr structure. */
int cmsg_level; /* Originating protocol. */
int cmsg_type; /* Protocol specific type. */
+#if (!defined __STRICT_ANSI__ && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L
__extension__ unsigned char __cmsg_data __flexarr; /* Ancillary data. */
- /* XXX Perhaps this should be removed. */
+#endif
};
/* Ancillary data object manipulation macros. */
-#if !defined __STRICT_ANSI__ && defined __GNUC__ && __GNUC__ >= 2
+#if (!defined __STRICT_ANSI__ && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L
# define CMSG_DATA(cmsg) ((cmsg)->__cmsg_data)
#else
# define CMSG_DATA(cmsg) ((unsigned char *) ((struct cmsghdr *) (cmsg) + 1))
--- libc/sysdeps/unix/sysv/linux/mips/bits/socket.h.jj Thu Aug 23 18:51:19 2001
+++ libc/sysdeps/unix/sysv/linux/mips/bits/socket.h Tue Sep 25 13:31:41 2001
@@ -233,12 +233,13 @@ struct cmsghdr
of cmsghdr structure. */
int cmsg_level; /* Originating protocol. */
int cmsg_type; /* Protocol specific type. */
+#if (!defined __STRICT_ANSI__ && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L
__extension__ unsigned char __cmsg_data __flexarr; /* Ancillary data. */
- /* XXX Perhaps this should be removed. */
+#endif
};
/* Ancillary data object manipulation macros. */
-#if !defined __STRICT_ANSI__ && defined __GNUC__ && __GNUC__ >= 2
+#if (!defined __STRICT_ANSI__ && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L
# define CMSG_DATA(cmsg) ((cmsg)->__cmsg_data)
#else
# define CMSG_DATA(cmsg) ((unsigned char *) ((struct cmsghdr *) (cmsg) + 1))
--- libc/sysdeps/unix/sysv/linux/sparc/bits/socket.h.jj Thu Aug 23 18:51:33 2001
+++ libc/sysdeps/unix/sysv/linux/sparc/bits/socket.h Tue Sep 25 13:31:54 2001
@@ -239,12 +239,13 @@ struct cmsghdr
of cmsghdr structure. */
int cmsg_level; /* Originating protocol. */
int cmsg_type; /* Protocol specific type. */
+#if (!defined __STRICT_ANSI__ && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L
__extension__ unsigned char __cmsg_data __flexarr; /* Ancillary data. */
- /* XXX Perhaps this should be removed. */
+#endif
};
/* Ancillary data object manipulation macros. */
-#if !defined __STRICT_ANSI__ && defined __GNUC__ && __GNUC__ >= 2
+#if (!defined __STRICT_ANSI__ && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L
# define CMSG_DATA(cmsg) ((cmsg)->__cmsg_data)
#else
# define CMSG_DATA(cmsg) ((unsigned char *) ((struct cmsghdr *) (cmsg) + 1))
Jakub
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |