diff --git a/src/pxar/decoder.rs b/src/pxar/decoder.rs index 8ebf530b..9e182455 100644 --- a/src/pxar/decoder.rs +++ b/src/pxar/decoder.rs @@ -90,6 +90,10 @@ impl Result<(), Error>> Decoder { let filename = self.inner.read_filename(head.size)?; let head: PxarHeader = self.inner.read_item()?; + if head.htype == PXAR_FORMAT_HARDLINK { + let (_, offset) = self.inner.read_hardlink(head.size)?; + return self.read_directory_entry(start - offset, end); + } check_ca_header::(&head, PXAR_ENTRY)?; let entry: PxarEntry = self.inner.read_item()?; diff --git a/src/pxar/sequential_decoder.rs b/src/pxar/sequential_decoder.rs index f3a0643b..507c600d 100644 --- a/src/pxar/sequential_decoder.rs +++ b/src/pxar/sequential_decoder.rs @@ -99,7 +99,7 @@ impl Result<(), Error>> SequentialDecoder { Ok(PathBuf::from(std::ffi::OsString::from_vec(buffer))) } - fn read_hardlink(&mut self, size: u64) -> Result<(PathBuf, u64), Error> { + pub (crate) fn read_hardlink(&mut self, size: u64) -> Result<(PathBuf, u64), Error> { if size < (HEADER_SIZE + 8 + 2) { bail!("dectected short hardlink header."); }