lib: clean up types for RepoCheckoutFilter
This commit is contained in:
1 parent
94b524b21f
commit
903bd86e52
2 files changed
+20
-36
No files matched your search
@@ -5,20 +5,29 @@ use libc::c_char;
|
||||
use ostree_sys::{OstreeRepo, OstreeRepoCheckoutFilterResult};
|
||||
use std::path::{Path, PathBuf};
|
||||
|
||||
pub type RepoCheckoutFilter =
|
||||
Option<Box<dyn Fn(&Repo, &Path, &libc::stat) -> RepoCheckoutFilterResult>>;
|
||||
pub type RepoCheckoutFilter = Box<dyn Fn(&Repo, &Path, &libc::stat) -> RepoCheckoutFilterResult>;
|
||||
|
||||
pub(super) unsafe extern "C" fn filter_trampoline(
|
||||
unsafe extern "C" fn filter_trampoline(
|
||||
repo: *mut OstreeRepo,
|
||||
path: *const c_char,
|
||||
stat: *mut libc::stat,
|
||||
user_data: gpointer,
|
||||
) -> OstreeRepoCheckoutFilterResult {
|
||||
// TODO: handle unwinding
|
||||
let closure =
|
||||
user_data as *const Box<dyn Fn(&Repo, &Path, &libc::stat) -> RepoCheckoutFilterResult>;
|
||||
let closure = user_data as *const RepoCheckoutFilter;
|
||||
let repo = FromGlibPtrNone::from_glib_none(repo);
|
||||
let path: PathBuf = FromGlibPtrNone::from_glib_none(path);
|
||||
let result = (*closure)(&repo, &path, &*stat);
|
||||
result.to_glib()
|
||||
}
|
||||
|
||||
pub(super) fn trampoline() -> Option<
|
||||
unsafe extern "C" fn(
|
||||
*mut OstreeRepo,
|
||||
*const c_char,
|
||||
*mut libc::stat,
|
||||
gpointer,
|
||||
) -> OstreeRepoCheckoutFilterResult,
|
||||
> {
|
||||
Some(filter_trampoline)
|
||||
}
|
||||
Reference in new issue
Block a user