diff --git a/bch_bindgen/build.rs b/bch_bindgen/build.rs index 0a99bedf..70f03076 100644 --- a/bch_bindgen/build.rs +++ b/bch_bindgen/build.rs @@ -64,7 +64,7 @@ fn main() { .blocklist_type("srcu_struct") .allowlist_var("BCH_.*") .allowlist_var("KEY_SPEC_.*") - .allowlist_var("Fix753_FMODE_.*") + .allowlist_var("Fix753_.*") .allowlist_var("bch.*") .allowlist_var("__bch2.*") .allowlist_var("__BTREE_ITER.*") diff --git a/bch_bindgen/src/libbcachefs_wrapper.h b/bch_bindgen/src/libbcachefs_wrapper.h index 141b0835..5dac92bc 100644 --- a/bch_bindgen/src/libbcachefs_wrapper.h +++ b/bch_bindgen/src/libbcachefs_wrapper.h @@ -14,9 +14,22 @@ #include "cmds.h" #include "raid/raid.h" +/* Fix753 is a workaround for https://github.com/rust-lang/rust-bindgen/issues/753 + * Functional macro are not expanded with bindgen, e.g. ioctl are automatically ignored + * from the generation + * + * To avoid this, use `MARK_FIX_753` to force the synthesis of your macro constant. + * It will appear in Rust with its proper name and not Fix753_{name}. + */ -#define MARK_FIX_753(req_name) const blk_mode_t Fix753_##req_name = req_name; +/* MARK_FIX_753: force generate a macro constant in Rust + * + * @type_name - a type for this constant + * @req_name - a name for this constant which will be used inside of Rust + */ +#define MARK_FIX_753(type_name, req_name) const type_name Fix753_##req_name = req_name; + +MARK_FIX_753(blk_mode_t, BLK_OPEN_READ); +MARK_FIX_753(blk_mode_t, BLK_OPEN_WRITE); +MARK_FIX_753(blk_mode_t, BLK_OPEN_EXCL); -MARK_FIX_753(BLK_OPEN_READ); -MARK_FIX_753(BLK_OPEN_WRITE); -MARK_FIX_753(BLK_OPEN_EXCL);