diff options
| -rw-r--r-- | libc/sysdeps/linux/common/bits/socket.h | 10 | ||||
| -rw-r--r-- | libc/sysdeps/linux/mips/bits/socket.h | 13 | 
2 files changed, 23 insertions, 0 deletions
| diff --git a/libc/sysdeps/linux/common/bits/socket.h b/libc/sysdeps/linux/common/bits/socket.h index cc13c4874..2f3dc797b 100644 --- a/libc/sysdeps/linux/common/bits/socket.h +++ b/libc/sysdeps/linux/common/bits/socket.h @@ -215,16 +215,26 @@ enum  /* Note: do not change these members to match glibc; these match the     SuSv3 spec already (e.g. msg_iovlen/msg_controllen).     http://www.opengroup.org/onlinepubs/009695399/basedefs/sys/socket.h.html */ +/* Note: linux kernel uses __kernel_size_t (which is 8bytes on 64bit +   platforms, and 4bytes on 32bit platforms) for msg_iovlen/msg_controllen */  struct msghdr    {      void *msg_name;		/* Address to send to/receive from.  */      socklen_t msg_namelen;	/* Length of address data.  */      struct iovec *msg_iov;	/* Vector of data to send/receive into.  */ +#if __WORDSIZE == 32      int msg_iovlen;		/* Number of elements in the vector.  */ +#else +    size_t msg_iovlen;		/* Number of elements in the vector.  */ +#endif      void *msg_control;		/* Ancillary data (eg BSD filedesc passing). */ +#if __WORDSIZE == 32      socklen_t msg_controllen;	/* Ancillary data buffer length.  */ +#else +    size_t msg_controllen;	/* Ancillary data buffer length.  */ +#endif      int msg_flags;		/* Flags on received message.  */    }; diff --git a/libc/sysdeps/linux/mips/bits/socket.h b/libc/sysdeps/linux/mips/bits/socket.h index 6361dfc0b..797166762 100644 --- a/libc/sysdeps/linux/mips/bits/socket.h +++ b/libc/sysdeps/linux/mips/bits/socket.h @@ -213,16 +213,29 @@ enum  /* Structure describing messages sent by     `sendmsg' and received by `recvmsg'.  */ +/* Note: do not change these members to match glibc; these match the +   SuSv3 spec already (e.g. msg_iovlen/msg_controllen). +   http://www.opengroup.org/onlinepubs/009695399/basedefs/sys/socket.h.html */ +/* Note: linux kernel uses __kernel_size_t (which is 8bytes on 64bit +   platforms, and 4bytes on 32bit platforms) for msg_iovlen/msg_controllen */  struct msghdr    {      void *msg_name;		/* Address to send to/receive from.  */      socklen_t msg_namelen;	/* Length of address data.  */      struct iovec *msg_iov;	/* Vector of data to send/receive into.  */ +#if __WORDSIZE == 32      int msg_iovlen;		/* Number of elements in the vector.  */ +#else +    size_t msg_iovlen;		/* Number of elements in the vector.  */ +#endif      void *msg_control;		/* Ancillary data (eg BSD filedesc passing). */ +#if __WORDSIZE == 32      socklen_t msg_controllen;	/* Ancillary data buffer length.  */ +#else +    size_t msg_controllen;	/* Ancillary data buffer length.  */ +#endif      int msg_flags;		/* Flags on received message.  */    }; | 
