diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2023-03-02 22:01:00 -0500 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-03-02 22:01:00 -0500 |
commit | d5b0d0892a9232ad0e5adb9a4c93cecbbfda41e6 (patch) | |
tree | 5e7bf277f82e2249105ebf9ce967ad48581a0ab8 /rust-src/bch_bindgen/src | |
parent | 8a7e3344fe089b3e2c6c45f00ade217e3d55a958 (diff) |
rust: BkeySC now has correct lifetime on BtreeIter
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'rust-src/bch_bindgen/src')
-rw-r--r-- | rust-src/bch_bindgen/src/bkey.rs | 7 | ||||
-rw-r--r-- | rust-src/bch_bindgen/src/btree.rs | 4 |
2 files changed, 7 insertions, 4 deletions
diff --git a/rust-src/bch_bindgen/src/bkey.rs b/rust-src/bch_bindgen/src/bkey.rs index 6735f298..c7910c76 100644 --- a/rust-src/bch_bindgen/src/bkey.rs +++ b/rust-src/bch_bindgen/src/bkey.rs @@ -2,13 +2,16 @@ use crate::c; use crate::fs::Fs; +use crate::btree::BtreeIter; use std::ffi::CStr; use std::fmt; +use std::marker::PhantomData; use std::mem::transmute; pub struct BkeySC<'a> { - pub k: &'a c::bkey, - pub v: &'a c::bch_val, + pub k: &'a c::bkey, + pub v: &'a c::bch_val, + pub(crate) iter: PhantomData<&'a mut BtreeIter<'a>> } pub enum BkeyValC<'a> { diff --git a/rust-src/bch_bindgen/src/btree.rs b/rust-src/bch_bindgen/src/btree.rs index 8ab91aeb..c6d2fec2 100644 --- a/rust-src/bch_bindgen/src/btree.rs +++ b/rust-src/bch_bindgen/src/btree.rs @@ -76,7 +76,7 @@ impl<'t> BtreeIter<'t> { unsafe { let k = c::bch2_btree_iter_peek_upto(&mut self.raw, end); errptr_to_result_c(k.k) - .map(|_| if !k.k.is_null() { Some(BkeySC { k: &*k.k, v: &*k.v }) } else { None } ) + .map(|_| if !k.k.is_null() { Some(BkeySC { k: &*k.k, v: &*k.v, iter: PhantomData }) } else { None } ) } } @@ -89,7 +89,7 @@ impl<'t> BtreeIter<'t> { let k = c::bch2_btree_iter_peek_and_restart_outlined(&mut self.raw); errptr_to_result_c(k.k) - .map(|_| if !k.k.is_null() { Some(BkeySC{ k: &*k.k, v: &*k.v }) } else { None } ) + .map(|_| if !k.k.is_null() { Some(BkeySC{ k: &*k.k, v: &*k.v, iter: PhantomData }) } else { None } ) } } |