diff options
author | Jeremy Allison <jra@samba.org> | 2014-10-03 09:24:04 -0700 |
---|---|---|
committer | Andreas Schneider <asn@cryptomilk.org> | 2014-10-06 12:33:35 +0200 |
commit | 57bcb8055eb3e15c4ce7bcdeeef7efed175ed347 (patch) | |
tree | 0c9af8a9fbba25fb9086eeb6504b7937369784c0 /source3/lib/unix_msg | |
parent | 7366204845fda07ee4a83a1a63875f643d0a5794 (diff) | |
download | samba-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.c | 19 |
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; } |