Skip to content

Instantly share code, notes, and snippets.

@glyn
Created October 16, 2017 16:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save glyn/e27f41b4ae746b0814e394a24f445252 to your computer and use it in GitHub Desktop.
Save glyn/e27f41b4ae746b0814e394a24f445252 to your computer and use it in GitHub Desktop.
/* automatically generated by rust-bindgen */
#[repr(C, packed)]
#[derive(Copy)]
pub struct header_t {
pub __bindgen_anon_1: header_t__bindgen_ty_1,
}
#[repr(C)]
#[derive(Copy)]
pub union header_t__bindgen_ty_1 {
pub __bindgen_anon_1: header_t__bindgen_ty_1__bindgen_ty_1,
pub unmap: [::std::os::raw::c_uchar; 6usize],
_bindgen_union_align: [u8; 6usize],
}
#[repr(C, packed)]
#[derive(Debug, Copy)]
pub struct header_t__bindgen_ty_1__bindgen_ty_1 {
pub _bitfield_1: [u16; 2usize],
pub cmd: ::std::os::raw::c_uchar,
pub size: ::std::os::raw::c_uchar,
}
#[test]
fn bindgen_test_layout_header_t__bindgen_ty_1__bindgen_ty_1() {
assert_eq!(::std::mem::size_of::<header_t__bindgen_ty_1__bindgen_ty_1>() ,
6usize , concat ! (
"Size of: " , stringify ! (
header_t__bindgen_ty_1__bindgen_ty_1 ) ));
assert_eq! (::std::mem::align_of::<header_t__bindgen_ty_1__bindgen_ty_1>()
, 1usize , concat ! (
"Alignment of " , stringify ! (
header_t__bindgen_ty_1__bindgen_ty_1 ) ));
assert_eq! (unsafe {
& ( * ( 0 as * const header_t__bindgen_ty_1__bindgen_ty_1 ) )
. cmd as * const _ as usize } , 4usize , concat ! (
"Alignment of field: " , stringify ! (
header_t__bindgen_ty_1__bindgen_ty_1 ) , "::" , stringify ! (
cmd ) ));
assert_eq! (unsafe {
& ( * ( 0 as * const header_t__bindgen_ty_1__bindgen_ty_1 ) )
. size as * const _ as usize } , 5usize , concat ! (
"Alignment of field: " , stringify ! (
header_t__bindgen_ty_1__bindgen_ty_1 ) , "::" , stringify ! (
size ) ));
}
impl Clone for header_t__bindgen_ty_1__bindgen_ty_1 {
fn clone(&self) -> Self { *self }
}
impl header_t__bindgen_ty_1__bindgen_ty_1 {
#[inline]
pub fn protocol(&self) -> ::std::os::raw::c_ushort {
let mut unit_field_val: u32 = unsafe { ::std::mem::uninitialized() };
unsafe {
::std::ptr::copy_nonoverlapping(&self._bitfield_1 as *const _ as
*const u8,
&mut unit_field_val as *mut u32 as
*mut u8,
::std::mem::size_of::<u32>())
};
let mask = 15u64 as u32;
let val = (unit_field_val & mask) >> 0usize;
unsafe { ::std::mem::transmute(val as u16) }
}
#[inline]
pub fn set_protocol(&mut self, val: ::std::os::raw::c_ushort) {
let mask = 15u64 as u32;
let val = val as u16 as u32;
let mut unit_field_val: u32 = unsafe { ::std::mem::uninitialized() };
unsafe {
::std::ptr::copy_nonoverlapping(&self._bitfield_1 as *const _ as
*const u8,
&mut unit_field_val as *mut u32 as
*mut u8,
::std::mem::size_of::<u32>())
};
unit_field_val &= !mask;
unit_field_val |= (val << 0usize) & mask;
unsafe {
::std::ptr::copy_nonoverlapping(&unit_field_val as *const _ as
*const u8,
&mut self._bitfield_1 as *mut _ as
*mut u8,
::std::mem::size_of::<u32>());
}
}
#[inline]
pub fn target(&self) -> ::std::os::raw::c_ushort {
let mut unit_field_val: u32 = unsafe { ::std::mem::uninitialized() };
unsafe {
::std::ptr::copy_nonoverlapping(&self._bitfield_1 as *const _ as
*const u8,
&mut unit_field_val as *mut u32 as
*mut u8,
::std::mem::size_of::<u32>())
};
let mask = 65520u64 as u32;
let val = (unit_field_val & mask) >> 4usize;
unsafe { ::std::mem::transmute(val as u16) }
}
#[inline]
pub fn set_target(&mut self, val: ::std::os::raw::c_ushort) {
let mask = 65520u64 as u32;
let val = val as u16 as u32;
let mut unit_field_val: u32 = unsafe { ::std::mem::uninitialized() };
unsafe {
::std::ptr::copy_nonoverlapping(&self._bitfield_1 as *const _ as
*const u8,
&mut unit_field_val as *mut u32 as
*mut u8,
::std::mem::size_of::<u32>())
};
unit_field_val &= !mask;
unit_field_val |= (val << 4usize) & mask;
unsafe {
::std::ptr::copy_nonoverlapping(&unit_field_val as *const _ as
*const u8,
&mut self._bitfield_1 as *mut _ as
*mut u8,
::std::mem::size_of::<u32>());
}
}
#[inline]
pub fn target_mode(&self) -> ::std::os::raw::c_ushort {
let mut unit_field_val: u32 = unsafe { ::std::mem::uninitialized() };
unsafe {
::std::ptr::copy_nonoverlapping(&self._bitfield_1 as *const _ as
*const u8,
&mut unit_field_val as *mut u32 as
*mut u8,
::std::mem::size_of::<u32>())
};
let mask = 983040u64 as u32;
let val = (unit_field_val & mask) >> 16usize;
unsafe { ::std::mem::transmute(val as u16) }
}
#[inline]
pub fn set_target_mode(&mut self, val: ::std::os::raw::c_ushort) {
let mask = 983040u64 as u32;
let val = val as u16 as u32;
let mut unit_field_val: u32 = unsafe { ::std::mem::uninitialized() };
unsafe {
::std::ptr::copy_nonoverlapping(&self._bitfield_1 as *const _ as
*const u8,
&mut unit_field_val as *mut u32 as
*mut u8,
::std::mem::size_of::<u32>())
};
unit_field_val &= !mask;
unit_field_val |= (val << 16usize) & mask;
unsafe {
::std::ptr::copy_nonoverlapping(&unit_field_val as *const _ as
*const u8,
&mut self._bitfield_1 as *mut _ as
*mut u8,
::std::mem::size_of::<u32>());
}
}
#[inline]
pub fn source(&self) -> ::std::os::raw::c_ushort {
let mut unit_field_val: u32 = unsafe { ::std::mem::uninitialized() };
unsafe {
::std::ptr::copy_nonoverlapping(&self._bitfield_1 as *const _ as
*const u8,
&mut unit_field_val as *mut u32 as
*mut u8,
::std::mem::size_of::<u32>())
};
let mask = 4293918720u64 as u32;
let val = (unit_field_val & mask) >> 20usize;
unsafe { ::std::mem::transmute(val as u16) }
}
#[inline]
pub fn set_source(&mut self, val: ::std::os::raw::c_ushort) {
let mask = 4293918720u64 as u32;
let val = val as u16 as u32;
let mut unit_field_val: u32 = unsafe { ::std::mem::uninitialized() };
unsafe {
::std::ptr::copy_nonoverlapping(&self._bitfield_1 as *const _ as
*const u8,
&mut unit_field_val as *mut u32 as
*mut u8,
::std::mem::size_of::<u32>())
};
unit_field_val &= !mask;
unit_field_val |= (val << 20usize) & mask;
unsafe {
::std::ptr::copy_nonoverlapping(&unit_field_val as *const _ as
*const u8,
&mut self._bitfield_1 as *mut _ as
*mut u8,
::std::mem::size_of::<u32>());
}
}
#[inline]
pub fn new_bitfield_1(protocol: ::std::os::raw::c_ushort,
target: ::std::os::raw::c_ushort,
target_mode: ::std::os::raw::c_ushort,
source: ::std::os::raw::c_ushort) -> u32 {
({
({
({
({ 0 } |
((protocol as u16 as u32) << 0usize) &
(15u64 as u32))
} | ((target as u16 as u32) << 4usize) & (65520u64 as u32))
} |
((target_mode as u16 as u32) << 16usize) &
(983040u64 as u32))
} | ((source as u16 as u32) << 20usize) & (4293918720u64 as u32))
}
}
#[test]
fn bindgen_test_layout_header_t__bindgen_ty_1() {
assert_eq!(::std::mem::size_of::<header_t__bindgen_ty_1>() , 6usize ,
concat ! ( "Size of: " , stringify ! ( header_t__bindgen_ty_1 )
));
assert_eq! (::std::mem::align_of::<header_t__bindgen_ty_1>() , 1usize ,
concat ! (
"Alignment of " , stringify ! ( header_t__bindgen_ty_1 ) ));
assert_eq! (unsafe {
& ( * ( 0 as * const header_t__bindgen_ty_1 ) ) . unmap as *
const _ as usize } , 0usize , concat ! (
"Alignment of field: " , stringify ! ( header_t__bindgen_ty_1
) , "::" , stringify ! ( unmap ) ));
}
impl Clone for header_t__bindgen_ty_1 {
fn clone(&self) -> Self { *self }
}
#[test]
fn bindgen_test_layout_header_t() {
assert_eq!(::std::mem::size_of::<header_t>() , 6usize , concat ! (
"Size of: " , stringify ! ( header_t ) ));
assert_eq! (::std::mem::align_of::<header_t>() , 1usize , concat ! (
"Alignment of " , stringify ! ( header_t ) ));
}
impl Clone for header_t {
fn clone(&self) -> Self { *self }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment