From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 2CAB81FF39E for ; Mon, 27 May 2024 16:34:07 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 514505690; Mon, 27 May 2024 16:34:15 +0200 (CEST) From: Christian Ebner To: pbs-devel@lists.proxmox.com Date: Mon, 27 May 2024 16:32:22 +0200 Message-Id: <20240527143323.456002-9-c.ebner@proxmox.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240527143323.456002-1-c.ebner@proxmox.com> References: <20240527143323.456002-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 T_SCC_BODY_TEXT_LINE -0.01 - Subject: [pbs-devel] [PATCH v7 pxar 08/69] 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 references 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 --- changes since version 6: - no changes 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 c061b74..51e846a 100644 --- a/src/accessor/mod.rs +++ b/src/accessor/mod.rs @@ -1013,4 +1013,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 b5c17b8..0fc3698 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`: @@ -581,6 +587,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