chore: reorg
This commit is contained in:
36
__ffi/live-reload-rust/greet-rs-2/src/main.rs
Normal file
36
__ffi/live-reload-rust/greet-rs-2/src/main.rs
Normal file
@@ -0,0 +1,36 @@
|
||||
use std::{ffi::c_void, ffi::CString, os::raw::c_char, os::raw::c_int};
|
||||
|
||||
#[link(name = "dl")]
|
||||
extern "C" {
|
||||
fn dlopen(path: *const c_char, flags: c_int) -> *const c_void;
|
||||
fn dlsym(handle: *const c_void, name: *const c_char) -> *const c_void;
|
||||
fn dlclose(handle: *const c_void);
|
||||
}
|
||||
|
||||
// had to look that one up in `dlfcn.h`
|
||||
// in C, it's a #define. in Rust, it's a proper constant
|
||||
pub const RTLD_LAZY: c_int = 0x00001;
|
||||
|
||||
fn main() {
|
||||
let lib_name = CString::new("../libgreet.so").unwrap();
|
||||
let lib = unsafe { dlopen(lib_name.as_ptr(), RTLD_LAZY) };
|
||||
if lib.is_null() {
|
||||
panic!("could not open library");
|
||||
}
|
||||
|
||||
let greet_name = CString::new("greet").unwrap();
|
||||
let greet = unsafe { dlsym(lib, greet_name.as_ptr()) };
|
||||
|
||||
type Greet = unsafe extern "C" fn(name: *const c_char);
|
||||
use std::mem::transmute;
|
||||
let greet: Greet = unsafe { transmute(greet) };
|
||||
|
||||
let name = CString::new("fresh coffee").unwrap();
|
||||
unsafe {
|
||||
greet(name.as_ptr());
|
||||
}
|
||||
|
||||
unsafe {
|
||||
dlclose(lib);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user