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() {
|
fn main() {
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|
||||||
@ -49,6 +58,7 @@ fn main() {
|
|||||||
.blocklist_type("srcu_struct")
|
.blocklist_type("srcu_struct")
|
||||||
.allowlist_var("BCH_.*")
|
.allowlist_var("BCH_.*")
|
||||||
.allowlist_var("KEY_SPEC_.*")
|
.allowlist_var("KEY_SPEC_.*")
|
||||||
|
.allowlist_var("Fix753_FMODE_.*")
|
||||||
.allowlist_var("bch.*")
|
.allowlist_var("bch.*")
|
||||||
.allowlist_var("__BTREE_ITER.*")
|
.allowlist_var("__BTREE_ITER.*")
|
||||||
.allowlist_var("BTREE_ITER.*")
|
.allowlist_var("BTREE_ITER.*")
|
||||||
@ -69,6 +79,7 @@ fn main() {
|
|||||||
.no_partialeq("bkey")
|
.no_partialeq("bkey")
|
||||||
.no_partialeq("bpos")
|
.no_partialeq("bpos")
|
||||||
.generate_inline_functions(true)
|
.generate_inline_functions(true)
|
||||||
|
.parse_callbacks(Box::new(Fix753 {}))
|
||||||
.generate()
|
.generate()
|
||||||
.expect("BindGen Generation Failiure: [libbcachefs_wrapper]");
|
.expect("BindGen Generation Failiure: [libbcachefs_wrapper]");
|
||||||
bindings
|
bindings
|
||||||
|
@ -10,4 +10,11 @@
|
|||||||
#include "../libbcachefs.h"
|
#include "../libbcachefs.h"
|
||||||
#include "../crypto.h"
|
#include "../crypto.h"
|
||||||
#include "../include/linux/bio.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) => {
|
($opts:ident, $n:ident, $v:expr) => {
|
||||||
bch_bindgen::paste! {
|
bch_bindgen::paste! {
|
||||||
$opts.$n = $v;
|
$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