|
| 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