50 lines · 1.3 KB · Rust
RawDownload
// SPDX-License-Identifier: GPL-2.0 //! Foreign function interface (FFI) types.//!//! This crate provides mapping from C primitive types to Rust ones.//!//! The Rust [`core`] crate provides [`core::ffi`], which maps integer types to the platform default//! C ABI. The kernel does not use [`core::ffi`], so it can customise the mapping that deviates from//! the platform default. #![no_std] macro_rules! alias {    ($($name:ident = $ty:ty;)*) => {$(        #[allow(non_camel_case_types, missing_docs)]        pub type $name = $ty;         // Check size compatibility with `core`.        const _: () = assert!(            ::core::mem::size_of::<$name>() == ::core::mem::size_of::<::core::ffi::$name>()        );    )*}} alias! {    // `core::ffi::c_char` is either `i8` or `u8` depending on architecture. In the kernel, we use    // `-funsigned-char` so it's always mapped to `u8`.    c_char = u8;     c_schar = i8;    c_uchar = u8;     c_short = i16;    c_ushort = u16;     c_int = i32;    c_uint = u32;     // In the kernel, `intptr_t` is defined to be `long` in all platforms, so we can map the type to    // `isize`.    c_long = isize;    c_ulong = usize;     c_longlong = i64;    c_ulonglong = u64;} pub use core::ffi::c_void; pub use core::ffi::CStr;