[pbs-devel] [RFC v2 pxar 03/36] format/decoder: add method to read payload references

Christian Ebner c.ebner at proxmox.com
Tue Mar 5 10:26:30 CET 2024


Adds a dedicated type and decoder method to read payload references.
This is in preparation for reading payloads from a dedicated payload
input stream.

Signed-off-by: Christian Ebner <c.ebner at proxmox.com>
---
changes since version 1:
- not present in previous version

 src/decoder/mod.rs | 14 ++++++++++++++
 src/format/mod.rs  |  6 ++++++
 2 files changed, 20 insertions(+)

diff --git a/src/decoder/mod.rs b/src/decoder/mod.rs
index d1fb911..70c44ce 100644
--- a/src/decoder/mod.rs
+++ b/src/decoder/mod.rs
@@ -661,6 +661,20 @@ impl<I: SeqRead> DecoderImpl<I> {
     async fn read_quota_project_id(&mut self) -> io::Result<format::QuotaProjectId> {
         self.read_simple_entry("quota project id").await
     }
+
+    async fn read_payload_ref(&mut self) -> io::Result<format::PayloadRef> {
+        let content_size =
+            usize::try_from(self.current_header.content_size()).map_err(io_err_other)?;
+
+        if content_size != 2 * size_of::<u64>() {
+            io_bail!("bad payload reference entry");
+        }
+
+        let offset: u64 = seq_read_entry(&mut self.input).await?;
+        let size: u64 = seq_read_entry(&mut self.input).await?;
+
+        Ok(format::PayloadRef { offset, size })
+    }
 }
 
 /// Reader for file contents inside a pxar archive.
diff --git a/src/format/mod.rs b/src/format/mod.rs
index 3512691..a3a7245 100644
--- a/src/format/mod.rs
+++ b/src/format/mod.rs
@@ -725,6 +725,12 @@ impl GoodbyeItem {
     }
 }
 
+#[derive(Clone, Debug)]
+pub(crate) struct PayloadRef {
+    pub(crate) offset: u64,
+    pub(crate) size: u64,
+}
+
 /// Hash a file name for use in the goodbye table.
 pub fn hash_filename(name: &[u8]) -> u64 {
     use std::hash::Hasher;
-- 
2.39.2





More information about the pbs-devel mailing list