#[allow(missing_docs)] pub type c_char = c_char_definition::c_char; // Validate that our definition is consistent with libstd's definition, without // introducing a dependency on libstd in ordinary builds. #[cfg(all(test, feature = "std"))] const _: self::c_char = 0 as std::os::raw::c_char; #[allow(dead_code)] mod c_char_definition { // These are the targets on which c_char is unsigned. #[cfg(any( all( target_os = "linux", any( target_arch = "aarch64", target_arch = "arm", target_arch = "hexagon", target_arch = "powerpc", target_arch = "powerpc64", target_arch = "s390x", target_arch = "riscv64", target_arch = "riscv32" ) ), all( target_os = "android", any(target_arch = "aarch64", target_arch = "arm") ), all(target_os = "l4re", target_arch = "x86_64"), all( target_os = "freebsd", any( target_arch = "aarch64", target_arch = "arm", target_arch = "powerpc", target_arch = "powerpc64", target_arch = "riscv64" ) ), all( target_os = "netbsd", any(target_arch = "aarch64", target_arch = "arm", target_arch = "powerpc") ), all(target_os = "openbsd", target_arch = "aarch64"), all( target_os = "vxworks", any( target_arch = "aarch64", target_arch = "arm", target_arch = "powerpc64", target_arch = "powerpc" ) ), all(target_os = "fuchsia", target_arch = "aarch64") ))] pub use self::unsigned::c_char; // On every other target, c_char is signed. pub use self::signed::*; mod unsigned { pub type c_char = u8; } mod signed { pub type c_char = i8; } }