From cb6b4225ad604a6ae8f08737157e1520f1f1a4a3 Mon Sep 17 00:00:00 2001 From: Roman Proskuryakoff Date: Sat, 20 Sep 2025 13:39:14 -0300 Subject: [PATCH] block-buffer: simplify {Lazy,Eager}::split_blocks --- block-buffer/src/sealed.rs | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/block-buffer/src/sealed.rs b/block-buffer/src/sealed.rs index 2be181d2..26330230 100644 --- a/block-buffer/src/sealed.rs +++ b/block-buffer/src/sealed.rs @@ -62,15 +62,12 @@ impl Sealed for super::Eager { fn split_blocks(data: &[u8]) -> (&[Array], &[u8]) { let nb = data.len() / N::USIZE; let blocks_len = nb * N::USIZE; - let tail_len = data.len() - blocks_len; + // SAFETY: we guarantee that created slices do not point outside of `data` unsafe { - let blocks_ptr = data.as_ptr() as *const Array; - let tail_ptr = data.as_ptr().add(blocks_len); - ( - slice::from_raw_parts(blocks_ptr, nb), - slice::from_raw_parts(tail_ptr, tail_len), - ) + let (blocks_raw, tail) = data.split_at_unchecked(blocks_len); + let blocks = slice::from_raw_parts(blocks_raw.as_ptr().cast(), nb); + (blocks, tail) } } } @@ -99,21 +96,18 @@ impl Sealed for super::Lazy { if data.is_empty() { return (&[], &[]); } - let (nb, tail_len) = if data.len() % N::USIZE == 0 { - (data.len() / N::USIZE - 1, N::USIZE) + let nb = if data.len() % N::USIZE == 0 { + data.len() / N::USIZE - 1 } else { - let nb = data.len() / N::USIZE; - (nb, data.len() - nb * N::USIZE) + data.len() / N::USIZE }; let blocks_len = nb * N::USIZE; + // SAFETY: we guarantee that created slices do not point outside of `data` unsafe { - let blocks_ptr = data.as_ptr() as *const Array; - let tail_ptr = data.as_ptr().add(blocks_len); - ( - slice::from_raw_parts(blocks_ptr, nb), - slice::from_raw_parts(tail_ptr, tail_len), - ) + let (blocks_raw, tail) = data.split_at_unchecked(blocks_len); + let blocks = slice::from_raw_parts(blocks_raw.as_ptr().cast(), nb); + (blocks, tail) } } }