133d722a9Sopenharmony_ci#![cfg(feature = "alloc")] 233d722a9Sopenharmony_ci 333d722a9Sopenharmony_ciuse crate::result::PtrLen; 433d722a9Sopenharmony_ciuse alloc::boxed::Box; 533d722a9Sopenharmony_ciuse alloc::string::String; 633d722a9Sopenharmony_ciuse core::ptr::NonNull; 733d722a9Sopenharmony_ciuse core::slice; 833d722a9Sopenharmony_ci 933d722a9Sopenharmony_ci#[export_name = "cxxbridge1$exception"] 1033d722a9Sopenharmony_ciunsafe extern "C" fn exception(ptr: *const u8, len: usize) -> PtrLen { 1133d722a9Sopenharmony_ci let slice = unsafe { slice::from_raw_parts(ptr, len) }; 1233d722a9Sopenharmony_ci let string = String::from_utf8_lossy(slice); 1333d722a9Sopenharmony_ci let len = string.len(); 1433d722a9Sopenharmony_ci let raw_str = Box::into_raw(string.into_owned().into_boxed_str()); 1533d722a9Sopenharmony_ci let raw_u8 = raw_str.cast::<u8>(); 1633d722a9Sopenharmony_ci let nonnull = unsafe { NonNull::new_unchecked(raw_u8) }; 1733d722a9Sopenharmony_ci PtrLen { ptr: nonnull, len } 1833d722a9Sopenharmony_ci} 19