diff --git a/src/result.rs b/src/result.rs index 29c5d679a..7927c2048 100644 --- a/src/result.rs +++ b/src/result.rs @@ -1,16 +1,22 @@ use crate::exception::Exception; -use crate::rust_str::RustStr; use alloc::boxed::Box; use alloc::string::{String, ToString}; use core::fmt::Display; -use core::ptr; +use core::ptr::{self, NonNull}; use core::result::Result as StdResult; use core::slice; use core::str; +#[repr(C)] +#[derive(Copy, Clone)] +struct PtrLen { + ptr: NonNull, + len: usize, +} + #[repr(C)] pub union Result { - err: RustStr, + err: PtrLen, ok: *const u8, // null } @@ -41,7 +47,10 @@ unsafe fn to_c_error(msg: String) -> Result { let copy = error(ptr, len); let slice = slice::from_raw_parts(copy, len); let string = str::from_utf8_unchecked(slice); - let err = RustStr::from(string); + let err = PtrLen { + ptr: NonNull::from(string).cast::(), + len: string.len(), + }; Result { err } }