On Mon, Mar 31, 2025 at 02:35:09PM +0000, Thomas Mühlbacher wrote:
> Done through suppressing clippy lints in the generated bindings module,
> adding some transmute type annotations, changing a vec to slice type.
>
> Signed-off-by: Thomas Mühlbacher <[email protected]>
> ---
> bch_bindgen/src/bcachefs.rs | 5 ++
> bch_bindgen/src/bkey.rs | 151 ++++++++++++++++++++++++++++--------
> bch_bindgen/src/btree.rs | 1 +
> bch_bindgen/src/fs.rs | 2 +-
> bch_bindgen/src/lib.rs | 4 +-
> 5 files changed, 127 insertions(+), 36 deletions(-)
>
> diff --git a/bch_bindgen/src/bcachefs.rs b/bch_bindgen/src/bcachefs.rs
> index fbbac5ed..3fa0060e 100644
> --- a/bch_bindgen/src/bcachefs.rs
> +++ b/bch_bindgen/src/bcachefs.rs
> @@ -1,3 +1,8 @@
> +#![allow(clippy::missing_safety_doc)]
> +#![allow(clippy::too_many_arguments)]
> +#![allow(clippy::transmute_int_to_bool)]
> +#![allow(clippy::unnecessary_cast)]
> +#![allow(clippy::useless_transmute)]
> #![allow(non_upper_case_globals)]
> #![allow(non_camel_case_types)]
> #![allow(non_snake_case)]
> diff --git a/bch_bindgen/src/bkey.rs b/bch_bindgen/src/bkey.rs
> index af109167..9d38a0b9 100644
> --- a/bch_bindgen/src/bkey.rs
> +++ b/bch_bindgen/src/bkey.rs
> @@ -1,9 +1,9 @@
> #![allow(non_camel_case_types)]
>
> use crate::btree::BtreeIter;
> -use crate::c;
> use crate::fs::Fs;
> use crate::printbuf_to_formatter;
> +use crate::{bcachefs, c};
> use std::fmt;
> use std::marker::PhantomData;
> use std::mem::transmute;
> @@ -96,39 +96,124 @@ impl<'a, 'b> BkeySC<'a> {
> KEY_TYPE_deleted => deleted,
> KEY_TYPE_whiteout => whiteout,
> KEY_TYPE_error => error,
> - KEY_TYPE_cookie => cookie(transmute(self.v)),
> - KEY_TYPE_hash_whiteout => hash_whiteout(transmute(self.v)),
> - KEY_TYPE_btree_ptr => btree_ptr(transmute(self.v)),
> - KEY_TYPE_extent => extent(transmute(self.v)),
> - KEY_TYPE_reservation => reservation(transmute(self.v)),
> - KEY_TYPE_inode => inode(transmute(self.v)),
> - KEY_TYPE_inode_generation =>
> inode_generation(transmute(self.v)),
> - KEY_TYPE_dirent => dirent(transmute(self.v)),
> - KEY_TYPE_xattr => xattr(transmute(self.v)),
> - KEY_TYPE_alloc => alloc(transmute(self.v)),
> - KEY_TYPE_quota => quota(transmute(self.v)),
> - KEY_TYPE_stripe => stripe(transmute(self.v)),
> - KEY_TYPE_reflink_p => reflink_p(transmute(self.v)),
> - KEY_TYPE_reflink_v => reflink_v(transmute(self.v)),
> - KEY_TYPE_inline_data => inline_data(transmute(self.v)),
> - KEY_TYPE_btree_ptr_v2 => btree_ptr_v2(transmute(self.v)),
> - KEY_TYPE_indirect_inline_data =>
> indirect_inline_data(transmute(self.v)),
> - KEY_TYPE_alloc_v2 => alloc_v2(transmute(self.v)),
> - KEY_TYPE_subvolume => subvolume(transmute(self.v)),
> - KEY_TYPE_snapshot => snapshot(transmute(self.v)),
> - KEY_TYPE_inode_v2 => inode_v2(transmute(self.v)),
> - KEY_TYPE_alloc_v3 => inode_v3(transmute(self.v)),
> + KEY_TYPE_cookie => cookie(transmute::<&bcachefs::bch_val,
> &bcachefs::bch_cookie>(
> + self.v,
> + )),
!?!?!?!?
> + KEY_TYPE_hash_whiteout => hash_whiteout(transmute::<
> + &bcachefs::bch_val,
> + &bcachefs::bch_hash_whiteout,
> + >(self.v)),
> + KEY_TYPE_btree_ptr => btree_ptr(transmute::<
> + &bcachefs::bch_val,
> + &bcachefs::bch_btree_ptr,
> + >(self.v)),
> + KEY_TYPE_extent => extent(transmute::<&bcachefs::bch_val,
> &bcachefs::bch_extent>(
> + self.v,
> + )),
> + KEY_TYPE_reservation => reservation(transmute::<
> + &bcachefs::bch_val,
> + &bcachefs::bch_reservation,
> + >(self.v)),
> + KEY_TYPE_inode => inode(transmute::<&bcachefs::bch_val,
> &bcachefs::bch_inode>(
> + self.v,
> + )),
> + KEY_TYPE_inode_generation => inode_generation(transmute::<
> + &bcachefs::bch_val,
> + &bcachefs::bch_inode_generation,
> + >(self.v)),
> + KEY_TYPE_dirent => dirent(transmute::<&bcachefs::bch_val,
> &bcachefs::bch_dirent>(
> + self.v,
> + )),
> + KEY_TYPE_xattr => xattr(transmute::<&bcachefs::bch_val,
> &bcachefs::bch_xattr>(
> + self.v,
> + )),
> + KEY_TYPE_alloc => alloc(transmute::<&bcachefs::bch_val,
> &bcachefs::bch_alloc>(
> + self.v,
> + )),
> + KEY_TYPE_quota => quota(transmute::<&bcachefs::bch_val,
> &bcachefs::bch_quota>(
> + self.v,
> + )),
> + KEY_TYPE_stripe => stripe(transmute::<&bcachefs::bch_val,
> &bcachefs::bch_stripe>(
> + self.v,
> + )),
> + KEY_TYPE_reflink_p => reflink_p(transmute::<
> + &bcachefs::bch_val,
> + &bcachefs::bch_reflink_p,
> + >(self.v)),
> + KEY_TYPE_reflink_v => reflink_v(transmute::<
> + &bcachefs::bch_val,
> + &bcachefs::bch_reflink_v,
> + >(self.v)),
> + KEY_TYPE_inline_data => inline_data(transmute::<
> + &bcachefs::bch_val,
> + &bcachefs::bch_inline_data,
> + >(self.v)),
> + KEY_TYPE_btree_ptr_v2 => btree_ptr_v2(transmute::<
> + &bcachefs::bch_val,
> + &bcachefs::bch_btree_ptr_v2,
> + >(self.v)),
> + KEY_TYPE_indirect_inline_data =>
> indirect_inline_data(transmute::<
> + &bcachefs::bch_val,
> + &bcachefs::bch_indirect_inline_data,
> + >(self.v)),
> + KEY_TYPE_alloc_v2 => alloc_v2(transmute::<
> + &bcachefs::bch_val,
> + &bcachefs::bch_alloc_v2,
> + >(self.v)),
> + KEY_TYPE_subvolume => subvolume(transmute::<
> + &bcachefs::bch_val,
> + &bcachefs::bch_subvolume,
> + >(self.v)),
> + KEY_TYPE_snapshot => snapshot(transmute::<
> + &bcachefs::bch_val,
> + &bcachefs::bch_snapshot,
> + >(self.v)),
> + KEY_TYPE_inode_v2 => inode_v2(transmute::<
> + &bcachefs::bch_val,
> + &bcachefs::bch_inode_v2,
> + >(self.v)),
> + KEY_TYPE_alloc_v3 => inode_v3(transmute::<
> + &bcachefs::bch_val,
> + &bcachefs::bch_inode_v3,
> + >(self.v)),
> KEY_TYPE_set => set,
> - KEY_TYPE_lru => lru(transmute(self.v)),
> - KEY_TYPE_alloc_v4 => alloc_v4(transmute(self.v)),
> - KEY_TYPE_backpointer => backpointer(transmute(self.v)),
> - KEY_TYPE_inode_v3 => inode_v3(transmute(self.v)),
> - KEY_TYPE_bucket_gens => bucket_gens(transmute(self.v)),
> - KEY_TYPE_snapshot_tree => snapshot_tree(transmute(self.v)),
> - KEY_TYPE_logged_op_truncate =>
> logged_op_truncate(transmute(self.v)),
> - KEY_TYPE_logged_op_finsert =>
> logged_op_finsert(transmute(self.v)),
> - KEY_TYPE_accounting => accounting(transmute(self.v)),
> - KEY_TYPE_inode_alloc_cursor =>
> inode_alloc_cursor(transmute(self.v)),
> + KEY_TYPE_lru => lru(transmute::<&bcachefs::bch_val,
> &bcachefs::bch_lru>(self.v)),
> + KEY_TYPE_alloc_v4 => alloc_v4(transmute::<
> + &bcachefs::bch_val,
> + &bcachefs::bch_alloc_v4,
> + >(self.v)),
> + KEY_TYPE_backpointer => backpointer(transmute::<
> + &bcachefs::bch_val,
> + &bcachefs::bch_backpointer,
> + >(self.v)),
> + KEY_TYPE_inode_v3 => inode_v3(transmute::<
> + &bcachefs::bch_val,
> + &bcachefs::bch_inode_v3,
> + >(self.v)),
> + KEY_TYPE_bucket_gens => bucket_gens(transmute::<
> + &bcachefs::bch_val,
> + &bcachefs::bch_bucket_gens,
> + >(self.v)),
> + KEY_TYPE_snapshot_tree => snapshot_tree(transmute::<
> + &bcachefs::bch_val,
> + &bcachefs::bch_snapshot_tree,
> + >(self.v)),
> + KEY_TYPE_logged_op_truncate =>
> logged_op_truncate(transmute::<
> + &bcachefs::bch_val,
> + &bcachefs::bch_logged_op_truncate,
> + >(self.v)),
> + KEY_TYPE_logged_op_finsert => logged_op_finsert(transmute::<
> + &bcachefs::bch_val,
> + &bcachefs::bch_logged_op_finsert,
> + >(self.v)),
> + KEY_TYPE_accounting => accounting(transmute::<
> + &bcachefs::bch_val,
> + &bcachefs::bch_accounting,
> + >(self.v)),
> + KEY_TYPE_inode_alloc_cursor =>
> inode_alloc_cursor(transmute::<
> + &bcachefs::bch_val,
> + &bcachefs::bch_inode_alloc_cursor,
> + >(self.v)),
> KEY_TYPE_MAX => unreachable!(),
> }
> }
> diff --git a/bch_bindgen/src/btree.rs b/bch_bindgen/src/btree.rs
> index 99c2a5b5..0d8d7303 100644
> --- a/bch_bindgen/src/btree.rs
> +++ b/bch_bindgen/src/btree.rs
> @@ -189,6 +189,7 @@ impl<'t> BtreeNodeIter<'t> {
> }
> }
>
> + #[allow(clippy::should_implement_trait)]
> pub fn next(&mut self) -> Result<Option<&c::btree>, bch_errcode> {
> unsafe {
> let b = c::bch2_btree_iter_next_node(&mut self.raw);
> diff --git a/bch_bindgen/src/fs.rs b/bch_bindgen/src/fs.rs
> index e44fca25..2997ed8f 100644
> --- a/bch_bindgen/src/fs.rs
> +++ b/bch_bindgen/src/fs.rs
> @@ -9,7 +9,7 @@ pub struct Fs {
> }
>
> impl Fs {
> - pub fn open(devs: &Vec<PathBuf>, opts: c::bch_opts) -> Result<Fs,
> bch_errcode> {
> + pub fn open(devs: &[PathBuf], opts: c::bch_opts) -> Result<Fs,
> bch_errcode> {
> let devs: Vec<_> = devs
> .iter()
> .map(|i|
> CString::new(i.as_os_str().as_bytes()).unwrap().into_raw())
> diff --git a/bch_bindgen/src/lib.rs b/bch_bindgen/src/lib.rs
> index 7c313921..cc56c298 100644
> --- a/bch_bindgen/src/lib.rs
> +++ b/bch_bindgen/src/lib.rs
> @@ -114,7 +114,7 @@ impl FromStr for c::btree_id {
> let v =
> unsafe { c::match_string(c::__bch2_btree_ids[..].as_ptr(),
> (-1_isize) as usize, p) };
> if v >= 0 {
> - Ok(unsafe { std::mem::transmute(v) })
> + Ok(unsafe { std::mem::transmute::<i32, bcachefs::btree_id>(v) })
> } else {
> Err(BchToolsErr::InvalidBtreeId)
> }
> @@ -130,7 +130,7 @@ impl FromStr for c::bch_bkey_type {
>
> let v = unsafe { c::match_string(c::bch2_bkey_types[..].as_ptr(),
> (-1_isize) as usize, p) };
> if v >= 0 {
> - Ok(unsafe { std::mem::transmute(v) })
> + Ok(unsafe { std::mem::transmute::<i32,
> bcachefs::bch_bkey_type>(v) })
> } else {
> Err(BchToolsErr::InvalidBkeyType)
> }
> --
> 2.48.1
>