diff options
Diffstat (limited to 'include/sparse')
-rw-r--r-- | include/sparse/sys/socket.h | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/include/sparse/sys/socket.h b/include/sparse/sys/socket.h index d7e17ea12..13f61e508 100644 --- a/include/sparse/sys/socket.h +++ b/include/sparse/sys/socket.h @@ -47,6 +47,37 @@ struct msghdr { int msg_flags; }; +struct cmsghdr { + size_t cmsg_len; + int cmsg_level; + int cmsg_type; + unsigned char cmsg_data[]; +}; + +#define __CMSG_ALIGNTO sizeof(size_t) +#define CMSG_ALIGN(LEN) \ + (((LEN) + __CMSG_ALIGNTO - 1) / __CMSG_ALIGNTO * __CMSG_ALIGNTO) +#define CMSG_DATA(CMSG) ((CMSG)->cmsg_data) +#define CMSG_LEN(LEN) (sizeof(struct cmsghdr) + (LEN)) +#define CMSG_SPACE(LEN) CMSG_ALIGN(CMSG_LEN(LEN)) +#define CMSG_FIRSTHDR(MSG) \ + ((MSG)->msg_controllen ? (struct cmsghdr *) (MSG)->msg_control : NULL) +#define CMSG_NXTHDR(MSG, CMSG) __cmsg_nxthdr(MSG, CMSG) + +static inline struct cmsghdr * +__cmsg_nxthdr(struct msghdr *msg, struct cmsghdr *cmsg) +{ + size_t ofs = (char *) cmsg - (char *) msg->msg_control; + size_t next_ofs = ofs + CMSG_ALIGN(cmsg->cmsg_len); + return (next_ofs < msg->msg_controllen + ? (void *) ((char *) msg->msg_control + next_ofs) + : NULL); +} + +enum { + SCM_RIGHTS = 1 +}; + enum { SOCK_DGRAM, SOCK_RAW, |