lib: clean up types for RepoCheckoutFilter

This commit is contained in:
Felix Krull authored and Colin Walters committed 2022-05-06 12:53:54 -04:00
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)
}