mirror of https://git.meli.delivery/meli/meli
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.1 KiB
Rust
45 lines
1.1 KiB
Rust
extern crate libc;
|
|
extern crate melib;
|
|
|
|
use melib::Envelope;
|
|
use std::ffi::CString;
|
|
use std::os::raw::c_char;
|
|
|
|
#[no_mangle]
|
|
pub extern "C" fn print_envelope(ptr: *const Envelope) -> *const c_char {
|
|
unsafe {
|
|
assert!(!ptr.is_null(), "Null pointer in print_envelope");
|
|
//println!("got addr {}", p as u64);
|
|
//unsafe { CString::new("blah".to_string()).unwrap().as_ptr() }
|
|
let s = CString::new(format!("{:?}", *ptr)).unwrap();
|
|
drop(ptr);
|
|
let p = s.as_ptr();
|
|
std::mem::forget(s);
|
|
p
|
|
}
|
|
}
|
|
|
|
#[no_mangle]
|
|
pub extern "C" fn get_empty_envelope() -> *mut Envelope {
|
|
let mut ret = Envelope::default();
|
|
let ptr = std::ptr::NonNull::new(&mut ret as *mut Envelope)
|
|
.expect("Envelope::default() has a NULL pointer?");
|
|
|
|
let ptr = ptr.as_ptr();
|
|
std::mem::forget(ret);
|
|
ptr
|
|
}
|
|
|
|
#[no_mangle]
|
|
pub extern "C" fn destroy_cstring(ptr: *mut c_char) {
|
|
unsafe {
|
|
let slice = CString::from_raw(ptr);
|
|
drop(slice);
|
|
}
|
|
}
|
|
|
|
#[no_mangle]
|
|
pub extern "C" fn envelope_size() -> libc::size_t {
|
|
std::mem::size_of::<Envelope>()
|
|
}
|