]> git.proxmox.com Git - pxar.git/commitdiff
encoder: fix contents of hardlinks
authorWolfgang Bumiller <w.bumiller@proxmox.com>
Mon, 8 Jun 2020 07:55:31 +0000 (09:55 +0200)
committerWolfgang Bumiller <w.bumiller@proxmox.com>
Mon, 8 Jun 2020 07:55:31 +0000 (09:55 +0200)
Signed-off-by: Wolfgang Bumiller <w.bumiller@proxmox.com>
src/encoder/mod.rs

index 1189d0bbadd40b7f83cdce76291ee62a3fa7991f..b779b8d995a90e2cadcf6cee9abe81c9b04d744f 100644 (file)
@@ -371,18 +371,13 @@ impl<'a, T: SeqWrite + 'a> EncoderImpl<'a, T> {
             io_bail!("invalid hardlink offset, can only point to prior files");
         }
 
-        let hardlink = format::Hardlink {
-            offset: current_offset - target_offset.0,
-            data: target.as_os_str().as_bytes().to_vec(),
-        };
-        let hardlink = unsafe {
-            std::slice::from_raw_parts(
-                &hardlink as *const format::Hardlink as *const u8,
-                size_of::<format::Hardlink>(),
-            )
-        };
+        let offset_bytes = (current_offset - target_offset.0).to_le_bytes();
+        let target_bytes = target.as_os_str().as_bytes();
+        let mut hardlink = Vec::with_capacity(offset_bytes.len() + target_bytes.len());
+        hardlink.extend(&offset_bytes);
+        hardlink.extend(target_bytes);
         let _this_offset: LinkOffset = self
-            .add_file_entry(None, file_name, Some((format::PXAR_HARDLINK, hardlink)))
+            .add_file_entry(None, file_name, Some((format::PXAR_HARDLINK, &hardlink)))
             .await?;
         Ok(())
     }