mirror of
https://github.com/koverstreet/bcachefs-tools.git
synced 2025-03-10 00:00:04 +03:00
chore(rust): add opt_get! and expose some FMODE_* as Rust const
In an effort to rewrite `bch2_read_super` from C to Rust, it is neccessary to have `opt_get!` macro defined, and some FMODE_* consts (defined as macro in `include/linux/blkdev.h`) defined as Rust const. Bindgen is currently unable to exapnd C functional macro [1], this this commit use the workaround as introduced in [2]. [1] https://github.com/rust-lang/rust-bindgen/issues/753 [2] https://github.com/rust-lang/rust-bindgen/issues/753#issuecomment-608546390 Signed-off-by: TruongSinh Tran-Nguyen <i@truongsinh.pro>
This commit is contained in:
parent
9ee211eaca
commit
c1a8e27a3f
@ -1,3 +1,12 @@
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct Fix753 {}
|
||||
impl bindgen::callbacks::ParseCallbacks for Fix753 {
|
||||
fn item_name(&self, original_item_name: &str) -> Option<String> {
|
||||
Some(original_item_name.trim_start_matches("Fix753_").to_owned())
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
use std::path::PathBuf;
|
||||
|
||||
@ -49,6 +58,7 @@ fn main() {
|
||||
.blocklist_type("srcu_struct")
|
||||
.allowlist_var("BCH_.*")
|
||||
.allowlist_var("KEY_SPEC_.*")
|
||||
.allowlist_var("Fix753_FMODE_.*")
|
||||
.allowlist_var("bch.*")
|
||||
.allowlist_var("__BTREE_ITER.*")
|
||||
.allowlist_var("BTREE_ITER.*")
|
||||
@ -69,6 +79,7 @@ fn main() {
|
||||
.no_partialeq("bkey")
|
||||
.no_partialeq("bpos")
|
||||
.generate_inline_functions(true)
|
||||
.parse_callbacks(Box::new(Fix753 {}))
|
||||
.generate()
|
||||
.expect("BindGen Generation Failiure: [libbcachefs_wrapper]");
|
||||
bindings
|
||||
|
@ -10,4 +10,11 @@
|
||||
#include "../libbcachefs.h"
|
||||
#include "../crypto.h"
|
||||
#include "../include/linux/bio.h"
|
||||
#include "../include/linux/blkdev.h"
|
||||
|
||||
|
||||
#define MARK_FIX_753(req_name) const fmode_t Fix753_##req_name = req_name;
|
||||
|
||||
MARK_FIX_753(FMODE_READ);
|
||||
MARK_FIX_753(FMODE_WRITE);
|
||||
MARK_FIX_753(FMODE_EXCL);
|
@ -3,7 +3,33 @@ macro_rules! opt_set {
|
||||
($opts:ident, $n:ident, $v:expr) => {
|
||||
bch_bindgen::paste! {
|
||||
$opts.$n = $v;
|
||||
$opts.[<set_ $n _defined>](1);
|
||||
$opts.[<set_ $n _defined>](1)
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! opt_defined {
|
||||
($opts:ident, $n:ident) => {
|
||||
bch_bindgen::paste! {
|
||||
$opts.[< $n _defined>]()
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! opt_get {
|
||||
($opts:ident, $n:ident) => {
|
||||
if bch_bindgen::opt_defined!($opts, $n) == 0 {
|
||||
bch_bindgen::paste! {
|
||||
unsafe {
|
||||
bch_bindgen::bcachefs::bch2_opts_default.$n
|
||||
}
|
||||
}
|
||||
} else {
|
||||
bch_bindgen::paste! {
|
||||
$opts.$n
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user