Skip to content

Commit e8407f7

Browse files
committed
Yet another musl fix. Fixup to 959e1ad
1 parent 90f2740 commit e8407f7

File tree

1 file changed

+12
-9
lines changed

1 file changed

+12
-9
lines changed

src/sys/socket/mod.rs

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -866,15 +866,18 @@ pub fn recvmsg<'a>(fd: RawFd, iov: &[IoVec<&mut [u8]>],
866866
},
867867
None => (ptr::null_mut(), 0),
868868
};
869-
let mut mhdr = msghdr {
870-
msg_name: &mut address as *mut sockaddr_storage as *mut c_void,
871-
msg_namelen: mem::size_of::<sockaddr_storage>() as socklen_t,
872-
msg_iov: iov.as_ptr() as *mut iovec,
873-
msg_iovlen: iov.len() as _,
874-
msg_control: msg_control as *mut c_void,
875-
msg_controllen: msg_controllen as _,
876-
msg_flags: 0,
877-
.. unsafe { mem::zeroed() } // Needed for musl's pad fields
869+
let mut mhdr = {
870+
// Musl's msghdr has private fields, so this is the only way to
871+
// initialize it.
872+
let mut mhdr: msghdr = unsafe{mem::uninitialized()};
873+
mhdr.msg_name = &mut address as *mut sockaddr_storage as *mut c_void;
874+
mhdr.msg_namelen = mem::size_of::<sockaddr_storage>() as socklen_t;
875+
mhdr.msg_iov = iov.as_ptr() as *mut iovec;
876+
mhdr.msg_iovlen = iov.len() as _;
877+
mhdr.msg_control = msg_control as *mut c_void;
878+
mhdr.msg_controllen = msg_controllen as _;
879+
mhdr.msg_flags = 0;
880+
mhdr
878881
};
879882

880883
let ret = unsafe { libc::recvmsg(fd, &mut mhdr, flags.bits()) };

0 commit comments

Comments
 (0)