Skip to content

Commit d9cb637

Browse files
committed
Fix build on musl targets.
1 parent b35564f commit d9cb637

File tree

1 file changed

+32
-24
lines changed

1 file changed

+32
-24
lines changed

src/sys/socket/mod.rs

Lines changed: 32 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -418,10 +418,12 @@ impl<'a> ControlMessage<'a> {
418418
unsafe fn encode_into<'b>(&self, buf: &mut &'b mut [u8]) {
419419
match *self {
420420
ControlMessage::ScmRights(fds) => {
421-
let cmsg = cmsghdr {
422-
cmsg_len: self.len() as _,
423-
cmsg_level: libc::SOL_SOCKET,
424-
cmsg_type: libc::SCM_RIGHTS,
421+
let cmsg = {
422+
let mut cmsg: cmsghdr = mem::uninitialized();
423+
cmsg.cmsg_len = self.len() as _;
424+
cmsg.cmsg_level = libc::SOL_SOCKET;
425+
cmsg.cmsg_type = libc::SCM_RIGHTS;
426+
cmsg
425427
};
426428
copy_bytes(&cmsg, buf);
427429

@@ -436,10 +438,12 @@ impl<'a> ControlMessage<'a> {
436438
copy_bytes(fds, buf);
437439
},
438440
ControlMessage::ScmTimestamp(t) => {
439-
let cmsg = cmsghdr {
440-
cmsg_len: self.len() as _,
441-
cmsg_level: libc::SOL_SOCKET,
442-
cmsg_type: libc::SCM_TIMESTAMP,
441+
let cmsg = {
442+
let mut cmsg: cmsghdr = mem::uninitialized();
443+
cmsg.cmsg_len = self.len() as _;
444+
cmsg.cmsg_level = libc::SOL_SOCKET;
445+
cmsg.cmsg_type = libc::SCM_TIMESTAMP;
446+
cmsg
443447
};
444448
copy_bytes(&cmsg, buf);
445449

@@ -499,14 +503,16 @@ pub fn sendmsg<'a>(fd: RawFd, iov: &[IoVec<&'a [u8]>], cmsgs: &[ControlMessage<'
499503
ptr::null()
500504
};
501505

502-
let mhdr = msghdr {
503-
msg_name: name as *mut _,
504-
msg_namelen: namelen,
505-
msg_iov: iov.as_ptr() as *mut _,
506-
msg_iovlen: iov.len() as _,
507-
msg_control: cmsg_ptr as *mut _,
508-
msg_controllen: capacity as _,
509-
msg_flags: 0,
506+
let mhdr = unsafe {
507+
let mut mhdr: msghdr = mem::uninitialized();
508+
mhdr.msg_name = name as *mut _;
509+
mhdr.msg_namelen = namelen;
510+
mhdr.msg_iov = iov.as_ptr() as *mut _;
511+
mhdr.msg_iovlen = iov.len() as _;
512+
mhdr.msg_control = cmsg_ptr as *mut _;
513+
mhdr.msg_controllen = capacity as _;
514+
mhdr.msg_flags = 0;
515+
mhdr
510516
};
511517
let ret = unsafe { libc::sendmsg(fd, &mhdr, flags.bits()) };
512518

@@ -522,14 +528,16 @@ pub fn recvmsg<'a, T>(fd: RawFd, iov: &[IoVec<&mut [u8]>], cmsg_buffer: Option<&
522528
Some(cmsg_buffer) => (cmsg_buffer as *mut _, mem::size_of_val(cmsg_buffer)),
523529
None => (0 as *mut _, 0),
524530
};
525-
let mut mhdr = msghdr {
526-
msg_name: &mut address as *mut _ as *mut _,
527-
msg_namelen: mem::size_of::<sockaddr_storage>() as socklen_t,
528-
msg_iov: iov.as_ptr() as *mut _,
529-
msg_iovlen: iov.len() as _,
530-
msg_control: msg_control as *mut _,
531-
msg_controllen: msg_controllen as _,
532-
msg_flags: 0,
531+
let mut mhdr = unsafe {
532+
let mut mhdr: msghdr = mem::uninitialized();
533+
mhdr.msg_name = &mut address as *mut _ as *mut _;
534+
mhdr.msg_namelen = mem::size_of::<sockaddr_storage>() as socklen_t;
535+
mhdr.msg_iov = iov.as_ptr() as *mut _;
536+
mhdr.msg_iovlen = iov.len() as _;
537+
mhdr.msg_control = msg_control as *mut _;
538+
mhdr.msg_controllen = msg_controllen as _;
539+
mhdr.msg_flags = 0;
540+
mhdr
533541
};
534542
let ret = unsafe { libc::recvmsg(fd, &mut mhdr, flags.bits()) };
535543

0 commit comments

Comments
 (0)