From d5b0d0892a9232ad0e5adb9a4c93cecbbfda41e6 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Thu, 2 Mar 2023 22:01:00 -0500 Subject: [PATCH] rust: BkeySC now has correct lifetime on BtreeIter Signed-off-by: Kent Overstreet --- rust-src/bch_bindgen/src/bkey.rs | 7 +++++-- 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 } ) } }