mirror of
https://forgejo.ellis.link/continuwuation/continuwuity.git
synced 2025-07-29 19:28:31 +00:00
23 lines
653 B
Rust
23 lines
653 B
Rust
use std::ffi::OsStr;
|
|
|
|
use super::{path, Library};
|
|
use crate::{Err, Result};
|
|
|
|
const OPEN_FLAGS: i32 = libloading::os::unix::RTLD_LAZY | libloading::os::unix::RTLD_GLOBAL;
|
|
|
|
pub fn from_name(name: &str) -> Result<Library> {
|
|
let path = path::from_name(name)?;
|
|
from_path(&path)
|
|
}
|
|
|
|
pub fn from_path(path: &OsStr) -> Result<Library> {
|
|
//SAFETY: Calls dlopen(3) on unix platforms. This might not have to be unsafe
|
|
// if wrapped in with_dlerror.
|
|
let lib = unsafe { Library::open(Some(path), OPEN_FLAGS) };
|
|
if let Err(e) = lib {
|
|
let name = path::to_name(path)?;
|
|
return Err!("Loading module {name:?} failed: {e}");
|
|
}
|
|
|
|
Ok(lib.expect("module loaded"))
|
|
}
|