struct const_iovec iov;
struct cmsghdr *cmsg;
char buf[CMSG_SPACE(sizeof(int))];
+ void *cmsg_data;
/* at least one byte is required to be sent with fd passing */
i_assert(size > 0 && size < INT_MAX);
cmsg->cmsg_level = SOL_SOCKET;
cmsg->cmsg_type = SCM_RIGHTS;
cmsg->cmsg_len = CMSG_LEN(sizeof(int));
- *((int *) CMSG_DATA(cmsg)) = send_fd;
+ cmsg_data = CMSG_DATA(cmsg);
+ *(int *)cmsg_data = send_fd;
/* set the real length we want to use. Do it after all is
set just in case CMSG macros required the extra padding
struct cmsghdr *cmsg;
ssize_t ret;
char buf[CMSG_SPACE(sizeof(int))];
+ void *cmsg_data;
i_assert(size > 0 && size < INT_MAX);
cmsg = CMSG_FIRSTHDR(&msg);
if (!CHECK_MSG(msg) || !CHECK_CMSG(cmsg))
*fd = -1;
- else
- *fd = *((int *) CMSG_DATA(cmsg));
+ else {
+ cmsg_data = CMSG_DATA(cmsg);
+ *fd = *(int *)cmsg_data;
+ }
return ret;
}