diff options
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/unix/sysv/linux/bits/socket.h | 13 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/mips/bits/socket.h | 20 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/netinet/ip.h | 2 |
3 files changed, 21 insertions, 14 deletions
diff --git a/sysdeps/unix/sysv/linux/bits/socket.h b/sysdeps/unix/sysv/linux/bits/socket.h index 226e332043..a11c22db72 100644 --- a/sysdeps/unix/sysv/linux/bits/socket.h +++ b/sysdeps/unix/sysv/linux/bits/socket.h @@ -204,18 +204,19 @@ extern struct cmsghdr *__cmsg_nxthdr __P ((struct msghdr *__mhdr, _EXTERN_INLINE struct cmsghdr * __cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg) { - unsigned char *__p; - if ((size_t) __cmsg->cmsg_len < sizeof (struct cmsghdr)) /* The kernel header does this so there may be a reason. */ return NULL; - __p = (((unsigned char *) __cmsg) - + ((__cmsg->cmsg_len + sizeof (long int) - 1) & ~sizeof (long int))); - if (__p >= (unsigned char *) __mhdr->msg_control + __mhdr->msg_controllen) + __cmsg = (struct cmsghdr *) ((unsigned char *) __cmsg + + CMSG_ALIGN (__cmsg->cmsg_len)); + if ((unsigned char *) (__cmsg + 1) >= ((unsigned char *) __mhdr->msg_control + + __mhdr->msg_controllen) + || ((unsigned char *) __cmsg + CMSG_ALIGN (__cmsg->cmsg_len) + >= ((unsigned char *) __mhdr->msg_control + __mhdr->msg_controllen))) /* No more entries. */ return NULL; - return (struct cmsghdr *) __p; + return __cmsg; } /* Socket level message types. This must match the definitions in diff --git a/sysdeps/unix/sysv/linux/mips/bits/socket.h b/sysdeps/unix/sysv/linux/mips/bits/socket.h index 75ed54fc56..528b8be8d4 100644 --- a/sysdeps/unix/sysv/linux/mips/bits/socket.h +++ b/sysdeps/unix/sysv/linux/mips/bits/socket.h @@ -149,8 +149,13 @@ struct cmsghdr #endif #define CMSG_NXTHDR(mhdr, cmsg) __cmsg_nxthdr (mhdr, cmsg) #define CMSG_FIRSTHDR(mhdr) \ - ((size_t) (mhdr)->msg_controllen >= sizeof (struct cmsghdr) \ + ((size_t) (mhdr)->msg_controllen >= sizeof (struct cmsghdr) \ ? (struct cmsghdr *) (mhdr)->msg_control : (struct cmsghdr *) NULL) +#define CMSG_ALIGN(len) (((len) + sizeof (size_t) - 1) \ + & ~(sizeof (size_t) - 1)) +#define CMSG_SPACE(len) (CMSG_ALIGN (len) \ + + CMSG_ALIGN (sizeof (struct cmsghdr))) +#define CMSG_LEN(len) (CMSG_ALIGN (sizeof (struct cmsghdr)) + (len)) #ifndef _EXTERN_INLINE @@ -161,18 +166,19 @@ extern struct cmsghdr *__cmsg_nxthdr __P ((struct msghdr *__mhdr, _EXTERN_INLINE struct cmsghdr * __cmsg_nxthdr (struct msghdr *__mhdr, struct cmsghdr *__cmsg) { - unsigned char *__p; - if ((size_t) __cmsg->cmsg_len < sizeof (struct cmsghdr)) /* The kernel header does this so there may be a reason. */ return NULL; - __p = (((unsigned char *) __cmsg) - + ((__cmsg->cmsg_len + sizeof (long int) - 1) & ~sizeof (long int))); - if (__p >= (unsigned char *) __mhdr->msg_control + __mhdr->msg_controllen) + __cmsg = (struct cmsghdr *) ((unsigned char *) __cmsg + + CMSG_ALIGN (__cmsg->cmsg_len)); + if ((unsigned char *) (__cmsg + 1) >= ((unsigned char *) __mhdr->msg_control + + __mhdr->msg_controllen) + || ((unsigned char *) __cmsg + CMSG_ALIGN (__cmsg->cmsg_len) + >= ((unsigned char *) __mhdr->msg_control + __mhdr->msg_controllen))) /* No more entries. */ return NULL; - return (struct cmsghdr *) __p; + return __cmsg; } diff --git a/sysdeps/unix/sysv/linux/netinet/ip.h b/sysdeps/unix/sysv/linux/netinet/ip.h index 1add1b2b59..246a56a5de 100644 --- a/sysdeps/unix/sysv/linux/netinet/ip.h +++ b/sysdeps/unix/sysv/linux/netinet/ip.h @@ -224,7 +224,7 @@ struct ip_timestamp #define IPOPT_EOL 0 /* end of option list */ #define IPOPT_END IPOPT_EOL #define IPOPT_NOP 1 /* no operation */ -#define IPOPT_NOOP IP_NOP +#define IPOPT_NOOP IPOPT_NOP #define IPOPT_RR 7 /* record packet route */ #define IPOPT_TS 68 /* timestamp */ |