@@ -418,10 +418,12 @@ impl<'a> ControlMessage<'a> {
418
418
unsafe fn encode_into < ' b > ( & self , buf : & mut & ' b mut [ u8 ] ) {
419
419
match * self {
420
420
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
425
427
} ;
426
428
copy_bytes ( & cmsg, buf) ;
427
429
@@ -436,10 +438,12 @@ impl<'a> ControlMessage<'a> {
436
438
copy_bytes ( fds, buf) ;
437
439
} ,
438
440
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
443
447
} ;
444
448
copy_bytes ( & cmsg, buf) ;
445
449
@@ -499,14 +503,16 @@ pub fn sendmsg<'a>(fd: RawFd, iov: &[IoVec<&'a [u8]>], cmsgs: &[ControlMessage<'
499
503
ptr:: null ( )
500
504
} ;
501
505
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
510
516
} ;
511
517
let ret = unsafe { libc:: sendmsg ( fd, & mhdr, flags. bits ( ) ) } ;
512
518
@@ -522,14 +528,16 @@ pub fn recvmsg<'a, T>(fd: RawFd, iov: &[IoVec<&mut [u8]>], cmsg_buffer: Option<&
522
528
Some ( cmsg_buffer) => ( cmsg_buffer as * mut _ , mem:: size_of_val ( cmsg_buffer) ) ,
523
529
None => ( 0 as * mut _ , 0 ) ,
524
530
} ;
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
533
541
} ;
534
542
let ret = unsafe { libc:: recvmsg ( fd, & mut mhdr, flags. bits ( ) ) } ;
535
543
0 commit comments