summaryrefslogtreecommitdiffstats
path: root/source3/lib/unix_msg
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2014-10-03 09:24:04 -0700
committerAndreas Schneider <asn@cryptomilk.org>2014-10-06 12:33:35 +0200
commit57bcb8055eb3e15c4ce7bcdeeef7efed175ed347 (patch)
tree0c9af8a9fbba25fb9086eeb6504b7937369784c0 /source3/lib/unix_msg
parent7366204845fda07ee4a83a1a63875f643d0a5794 (diff)
downloadsamba-57bcb8055eb3e15c4ce7bcdeeef7efed175ed347.tar.gz
samba-57bcb8055eb3e15c4ce7bcdeeef7efed175ed347.tar.xz
samba-57bcb8055eb3e15c4ce7bcdeeef7efed175ed347.zip
s3: lib, s3: modules: Fix compilation on Solaris.
Based on work from YOUZHONG YANG <youzhong@gmail.com>. Code needs fixing when HAVE_STRUCT_MSGHDR_MSG_CONTROL is not defined. Also Solaris doesn't have msg_flags field (which we set to zero anyway, so if we initialize the entire struct to zero, we never need to refer to it). https://bugzilla.samba.org/show_bug.cgi?id=10849 Signed-off-by: Jeremy Allison <jra@samba.org> Reviewed-by: Andreas Schneider <asn@samba.org> Autobuild-User(master): Andreas Schneider <asn@cryptomilk.org> Autobuild-Date(master): Mon Oct 6 12:33:36 CEST 2014 on sn-devel-104
Diffstat (limited to 'source3/lib/unix_msg')
-rw-r--r--source3/lib/unix_msg/unix_msg.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/source3/lib/unix_msg/unix_msg.c b/source3/lib/unix_msg/unix_msg.c
index 4870068383..00ac7f52d3 100644
--- a/source3/lib/unix_msg/unix_msg.c
+++ b/source3/lib/unix_msg/unix_msg.c
@@ -477,7 +477,7 @@ static int queue_msg(struct unix_dgram_send_queue *q,
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;
@@ -487,6 +487,13 @@ static int queue_msg(struct unix_dgram_send_queue *q,
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) {
@@ -499,14 +506,6 @@ static int queue_msg(struct unix_dgram_send_queue *q,
}
#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;
@@ -593,7 +592,9 @@ static int queue_msg(struct unix_dgram_send_queue *q,
return 0;
fail:
+#ifdef HAVE_STRUCT_MSGHDR_MSG_CONTROL
close_fd_array(fds_copy, num_fds);
+#endif
return ret;
}