In C, the char type is specified with “The implementation shall define char to have the same range, representation, and behavior as either signed char or unsigned char.” On x86 it defaults to signed char, and on ARM it defaults to unsigned char. This carries over to Rust’s FFI, which aliases its c_char type to i8 on x86, and to u8 on ARM. We can fix this error by using the *const c_char type wherever it is needed, rather than assuming we are on x86 by passing *const i8. The only other place which uses the CStr::from_char_ptr() function is errname(), which already uses c_char correctly thanks to bindgen. Here is the error I encountered, building latest master: ``` error[E0308]: mismatched types --> drivers/gpu/drm/drm_panic_qr.rs:961:60 | 961 | let url_cstr: &CStr = unsafe { CStr::from_char_ptr(url) }; | ------------------- ^^^ expected `*const u8`, found `*const i8` | | | arguments to this function are incorrect | = note: expected raw pointer `*const u8` found raw pointer `*const i8` note: associated function defined here --> rust/kernel/str.rs:187:19 | 187 | pub unsafe fn from_char_ptr<'a>(ptr: *const crate::ffi::c_char) -> &'a Self { | ^^^^^^^^^^^^^ error: aborting due to 1 previous error For more information about this error, try `rustc --explain E0308`. ``` --- drivers/gpu/drm/drm_panic_qr.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_panic_qr.rs b/drivers/gpu/drm/drm_panic_qr.rs index ef2d490965ba..39ddb431b361 100644 --- a/drivers/gpu/drm/drm_panic_qr.rs +++ b/drivers/gpu/drm/drm_panic_qr.rs @@ -27,6 +27,7 @@ //! * <https://github.com/bjguillot/qr> use core::cmp; +use kernel::ffi::c_char; use kernel::str::CStr; #[derive(Debug, Clone, Copy, PartialEq, Eq, Ord, PartialOrd)] @@ -931,7 +932,7 @@ fn draw_all(&mut self, data: impl Iterator<Item = u8>) { /// They must remain valid for the duration of the function call. #[no_mangle] pub unsafe extern "C" fn drm_panic_qr_generate( - url: *const i8, + url: *const c_char, data: *mut u8, data_len: usize, data_size: usize, -- 2.48.1