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
> 

Reply via email to