From 88cee60bad70c3f9ab7a29c63c6846ac9797064e Mon Sep 17 00:00:00 2001 From: Christian Ebner Date: Wed, 8 Jan 2020 15:14:43 +0100 Subject: [PATCH] pxar: encoder: fix incorrect goodbye table entries and update displayed path. If nodes are excluded by feature flags, they must not appear in the goodbye table. This is fixed by continuing with the next entry in the for loop. Further the relative path buffer is now poped in order to correctly display the path. Signed-off-by: Christian Ebner --- src/pxar/encoder.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/pxar/encoder.rs b/src/pxar/encoder.rs index f37eac72..05641fac 100644 --- a/src/pxar/encoder.rs +++ b/src/pxar/encoder.rs @@ -843,7 +843,8 @@ impl<'a, W: Write, C: BackupCatalogWriter> Encoder<'a, W, C> { Ok(dir) => dir, Err(nix::Error::Sys(Errno::ENOENT)) => { self.report_vanished_file(&self.full_path())?; - continue; // fixme!! + self.relative_path.pop(); + continue; } Err(err) => bail!("open dir {:?} failed - {}", self.full_path(), err), }; @@ -897,6 +898,7 @@ impl<'a, W: Write, C: BackupCatalogWriter> Encoder<'a, W, C> { Ok(filefd) => filefd, Err(nix::Error::Sys(Errno::ENOENT)) => { self.report_vanished_file(&self.full_path())?; + self.relative_path.pop(); continue; } Err(err) => bail!("open file {:?} failed - {}", self.full_path(), err), @@ -939,6 +941,7 @@ impl<'a, W: Write, C: BackupCatalogWriter> Encoder<'a, W, C> { } Err(nix::Error::Sys(Errno::ENOENT)) => { self.report_vanished_file(&self.full_path())?; + self.relative_path.pop(); continue; } Err(err) => bail!("readlink {:?} failed - {}", self.full_path(), err), @@ -956,6 +959,8 @@ impl<'a, W: Write, C: BackupCatalogWriter> Encoder<'a, W, C> { self.encode_device(&stat)?; } else { eprintln!("skip device node: {:?}", self.full_path()); + self.relative_path.pop(); + continue; } } else if is_fifo(&stat) { if self.has_features(flags::WITH_FIFOS) { @@ -966,6 +971,8 @@ impl<'a, W: Write, C: BackupCatalogWriter> Encoder<'a, W, C> { self.encode_special(&stat)?; } else { eprintln!("skip fifo: {:?}", self.full_path()); + self.relative_path.pop(); + continue; } } else if is_socket(&stat) { if self.has_features(flags::WITH_SOCKETS) { @@ -976,6 +983,8 @@ impl<'a, W: Write, C: BackupCatalogWriter> Encoder<'a, W, C> { self.encode_special(&stat)?; } else { eprintln!("skip socket: {:?}", self.full_path()); + self.relative_path.pop(); + continue; } } else { bail!( -- 2.39.5