|
463 | 463 | pub ifa_flags: ::c_uint,
|
464 | 464 | pub ifa_addr: *mut ::sockaddr,
|
465 | 465 | pub ifa_netmask: *mut ::sockaddr,
|
466 |
| - pub ifa_ifu: *mut ::sockaddr, // FIXME This should be a union |
467 |
| - pub ifa_data: *mut ::c_void |
| 466 | + pub ifa_ifu: __c_anonymous_ifa_ifu, |
| 467 | + pub ifa_data: *mut ::c_void, |
468 | 468 | }
|
469 | 469 |
|
470 | 470 | pub struct passwd {
|
@@ -979,6 +979,11 @@ s_no_extra_traits! {
|
979 | 979 | pub sival_int: ::int,
|
980 | 980 | pub sival_ptr: *mut ::c_void,
|
981 | 981 | }
|
| 982 | + |
| 983 | + pub union __c_anonymous_ifa_ifu { |
| 984 | + ifu_broadaddr: *mut sockaddr, |
| 985 | + ifu_dstaddr: *mut sockaddr, |
| 986 | + } |
982 | 987 | }
|
983 | 988 |
|
984 | 989 | cfg_if! {
|
@@ -1325,6 +1330,25 @@ cfg_if! {
|
1325 | 1330 | unsafe { (self.sival_ptr as usize).hash(state) };
|
1326 | 1331 | }
|
1327 | 1332 | }
|
| 1333 | + |
| 1334 | + impl PartialEq for __c_anonymous_ifa_ifu { |
| 1335 | + fn eq(&self, other: &__c_anonymous_ifa_ifu) -> bool { |
| 1336 | + unsafe { self.ifu_dstaddr == other.ifu_dstaddr } |
| 1337 | + } |
| 1338 | + } |
| 1339 | + impl Eq for __c_anonymous_ifa_ifu {} |
| 1340 | + impl ::fmt::Debug for __c_anonymous_ifa_ifu { |
| 1341 | + fn fmt(&self, f: &mut ::fmt::Formatter) -> ::fmt::Result { |
| 1342 | + f.debug_struct("ifa_ifu") |
| 1343 | + .field("ifu_dstaddr", unsafe { &self.ifu_dstaddr } ) |
| 1344 | + .finish() |
| 1345 | + } |
| 1346 | + } |
| 1347 | + impl ::hash::Hash for __c_anonymous_ifa_ifu { |
| 1348 | + fn hash<H: ::hash::Hasher>(&self, state: &mut H) { |
| 1349 | + unsafe { self.ifu_dstaddr.hash(state) }; |
| 1350 | + } |
| 1351 | + } |
1328 | 1352 | }
|
1329 | 1353 | }
|
1330 | 1354 |
|
|
0 commit comments