|
| 1 | +#![warn(unsafe_op_in_unsafe_fn)] |
| 2 | + |
1 | 3 | use crate::prelude::*; |
2 | 4 |
|
3 | 5 | pub type off_t = i64; |
@@ -573,35 +575,40 @@ pub const RTAX_BRD: c_int = 7; |
573 | 575 |
|
574 | 576 | f! { |
575 | 577 | pub fn CMSG_FIRSTHDR(mhdr: *const crate::msghdr) -> *mut cmsghdr { |
576 | | - if (*mhdr).msg_controllen as usize >= size_of::<cmsghdr>() { |
577 | | - (*mhdr).msg_control.cast::<cmsghdr>() |
| 578 | + let ctrl_len = unsafe { (*mhdr).msg_controllen } as usize; |
| 579 | + if ctrl_len >= size_of::<cmsghdr>() { |
| 580 | + let ptr = unsafe { (*mhdr).msg_control }; |
| 581 | + ptr.cast::<cmsghdr>() |
578 | 582 | } else { |
579 | 583 | core::ptr::null_mut() |
580 | 584 | } |
581 | 585 | } |
582 | 586 |
|
583 | 587 | pub fn FD_CLR(fd: c_int, set: *mut fd_set) -> () { |
584 | | - let bits = size_of_val(&(*set).fds_bits[0]) * 8; |
| 588 | + let bits = unsafe { size_of_val( &(*set).fds_bits[0] ) * 8 }; |
585 | 589 | let fd = fd as usize; |
586 | | - (*set).fds_bits[fd / bits] &= !(1 << (fd % bits)); |
| 590 | + let mask = !(1 << (fd % bits)); |
| 591 | + unsafe { (*set).fds_bits[fd / bits] &= mask }; |
587 | 592 | return; |
588 | 593 | } |
589 | 594 |
|
590 | 595 | pub fn FD_ISSET(fd: c_int, set: *const fd_set) -> bool { |
591 | | - let bits = size_of_val(&(*set).fds_bits[0]) * 8; |
| 596 | + let bits = unsafe { size_of_val(&(*set).fds_bits[0]) * 8 }; |
592 | 597 | let fd = fd as usize; |
593 | | - return ((*set).fds_bits[fd / bits] & (1 << (fd % bits))) != 0; |
| 598 | + let bit = unsafe { (*set).fds_bits[fd / bits] }; |
| 599 | + return (bit & (1 << (fd % bits))) != 0; |
594 | 600 | } |
595 | 601 |
|
596 | 602 | pub fn FD_SET(fd: c_int, set: *mut fd_set) -> () { |
597 | | - let bits = size_of_val(&(*set).fds_bits[0]) * 8; |
| 603 | + let bits = unsafe { size_of_val(&(*set).fds_bits[0]) * 8 }; |
598 | 604 | let fd = fd as usize; |
599 | | - (*set).fds_bits[fd / bits] |= 1 << (fd % bits); |
| 605 | + unsafe { (*set).fds_bits[fd / bits] |= 1 << (fd % bits) }; |
600 | 606 | return; |
601 | 607 | } |
602 | 608 |
|
603 | 609 | pub fn FD_ZERO(set: *mut fd_set) -> () { |
604 | | - for slot in &mut (*set).fds_bits { |
| 610 | + let mut bits = unsafe { (*set).fds_bits }; |
| 611 | + for slot in &mut bits { |
605 | 612 | *slot = 0; |
606 | 613 | } |
607 | 614 | } |
|
0 commit comments