struct unix_dgram_msg *msg;
ssize_t data_len;
uint8_t *data_buf;
- size_t msglen;
+ size_t msglen = sizeof(struct unix_dgram_msg);
int i;
size_t tmp;
int ret = -1;
size_t cmsg_len = CMSG_LEN(fds_size);
size_t cmsg_space = CMSG_SPACE(fds_size);
char *cmsg_buf;
+
+ /*
+ * Note: No need to check for overflow here,
+ * since cmsg will store <= INT8_MAX fds.
+ */
+ msglen += cmsg_space;
+
#endif /* HAVE_STRUCT_MSGHDR_MSG_CONTROL */
if (num_fds > INT8_MAX) {
}
#endif
- msglen = sizeof(struct unix_dgram_msg);
-
- /*
- * Note: No need to check for overflow here,
- * since cmsg will store <= INT8_MAX fds.
- */
- msglen += cmsg_space;
-
data_len = iov_buflen(iov, iovlen);
if (data_len == -1) {
return EINVAL;
return 0;
fail:
+#ifdef HAVE_STRUCT_MSGHDR_MSG_CONTROL
close_fd_array(fds_copy, num_fds);
+#endif
return ret;
}
#ifndef HAVE_STRUCT_MSGHDR_MSG_CONTROL
int newfd;
+ ZERO_STRUCT(msg);
msg.msg_accrights = (caddr_t) &newfd;
msg.msg_accrightslen = sizeof(int);
#else
} control_un;
struct cmsghdr *cmptr;
+ ZERO_STRUCT(msg);
+ ZERO_STRUCT(control_un);
+
msg.msg_control = control_un.control;
msg.msg_controllen = sizeof(control_un.control);
#endif
msg.msg_name = NULL;
msg.msg_namelen = 0;
- msg.msg_flags = 0;
iov[0].iov_base = (void *)ptr;
iov[0].iov_len = nbytes;