From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id D488020EC8A for ; Mon, 29 Apr 2024 14:11:21 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 9FCDEF372; Mon, 29 Apr 2024 14:11:26 +0200 (CEST) From: Christian Ebner To: pbs-devel@lists.proxmox.com Date: Mon, 29 Apr 2024 14:10:11 +0200 Message-Id: <20240429121102.315059-8-c.ebner@proxmox.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240429121102.315059-1-c.ebner@proxmox.com> References: <20240429121102.315059-1-c.ebner@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.030 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pbs-devel] [PATCH v4 pxar 07/58] decoder: set payload input range when decoding via accessor X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox Backup Server development discussion Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pbs-devel-bounces@lists.proxmox.com Sender: "pbs-devel" When accessing the file contents via the sequential file restore the range of the payload contents cannot be inferred a-priori but need to be calculated based on the payload refereces encountered during decoding. Extending the `SeqRead` trait by the method `update_range` allows to set the range in the payload reader instance by implementing the method for `SeqReadAtAdapter`, thereby setting the correct content range to be accessed. Signed-off-by: Christian Ebner --- src/accessor/mod.rs | 4 ++++ src/decoder/mod.rs | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/src/accessor/mod.rs b/src/accessor/mod.rs index 46afbe3..fadd3d2 100644 --- a/src/accessor/mod.rs +++ b/src/accessor/mod.rs @@ -1038,4 +1038,8 @@ impl decoder::SeqRead for SeqReadAtAdapter { fn poll_position(self: Pin<&mut Self>, _cx: &mut Context) -> Poll>> { Poll::Ready(Some(Ok(self.range.start))) } + + fn update_range(&mut self, range: Range) { + self.range = range; + } } diff --git a/src/decoder/mod.rs b/src/decoder/mod.rs index 07b6c61..7c5cc12 100644 --- a/src/decoder/mod.rs +++ b/src/decoder/mod.rs @@ -8,6 +8,7 @@ use std::ffi::OsString; use std::future::poll_fn; use std::io; use std::mem::{self, size_of, size_of_val, MaybeUninit}; +use std::ops::Range; use std::os::unix::ffi::{OsStrExt, OsStringExt}; use std::path::{Path, PathBuf}; use std::pin::Pin; @@ -55,6 +56,11 @@ pub trait SeqRead { fn poll_position(self: Pin<&mut Self>, _cx: &mut Context) -> Poll>> { Poll::Ready(None) } + + /// Update range for Readers implementing `SeqReadAtAdapter` + fn update_range(&mut self, _range: Range) { + // nothing to be done, only implemented by `SeqReadAtAdapter`s + } } /// Allow using trait objects for generics taking a `SeqRead`: @@ -576,6 +582,10 @@ impl DecoderImpl { let to_skip = payload_ref.offset - self.payload_consumed; Self::skip(payload_input, to_skip as usize).await?; self.payload_consumed += to_skip; + } else { + let start = payload_ref.offset; + let end = start + payload_ref.size + size_of::
() as u64; + payload_input.update_range(start..end); } let header: Header = seq_read_entry(payload_input).await?; -- 2.39.2 _______________________________________________ pbs-devel mailing list pbs-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel