xref: /third_party/rust/crates/cxx/src/symbols/exception.rs
  • Home
  • History
  • Annotate Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
  • only in /third_party/rust/crates/cxx/src/symbols/
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

Indexes created Thu Nov 07 10:32:03 CST 2024