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 <c.ebner@proxmox.com>
This commit is contained in:
Christian Ebner 2020-01-08 15:14:43 +01:00 committed by Dietmar Maurer
parent ec906dcf19
commit 88cee60bad

View File

@ -843,7 +843,8 @@ impl<'a, W: Write, C: BackupCatalogWriter> Encoder<'a, W, C> {
Ok(dir) => dir, Ok(dir) => dir,
Err(nix::Error::Sys(Errno::ENOENT)) => { Err(nix::Error::Sys(Errno::ENOENT)) => {
self.report_vanished_file(&self.full_path())?; self.report_vanished_file(&self.full_path())?;
continue; // fixme!! self.relative_path.pop();
continue;
} }
Err(err) => bail!("open dir {:?} failed - {}", self.full_path(), err), 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, Ok(filefd) => filefd,
Err(nix::Error::Sys(Errno::ENOENT)) => { Err(nix::Error::Sys(Errno::ENOENT)) => {
self.report_vanished_file(&self.full_path())?; self.report_vanished_file(&self.full_path())?;
self.relative_path.pop();
continue; continue;
} }
Err(err) => bail!("open file {:?} failed - {}", self.full_path(), err), 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)) => { Err(nix::Error::Sys(Errno::ENOENT)) => {
self.report_vanished_file(&self.full_path())?; self.report_vanished_file(&self.full_path())?;
self.relative_path.pop();
continue; continue;
} }
Err(err) => bail!("readlink {:?} failed - {}", self.full_path(), err), 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)?; self.encode_device(&stat)?;
} else { } else {
eprintln!("skip device node: {:?}", self.full_path()); eprintln!("skip device node: {:?}", self.full_path());
self.relative_path.pop();
continue;
} }
} else if is_fifo(&stat) { } else if is_fifo(&stat) {
if self.has_features(flags::WITH_FIFOS) { 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)?; self.encode_special(&stat)?;
} else { } else {
eprintln!("skip fifo: {:?}", self.full_path()); eprintln!("skip fifo: {:?}", self.full_path());
self.relative_path.pop();
continue;
} }
} else if is_socket(&stat) { } else if is_socket(&stat) {
if self.has_features(flags::WITH_SOCKETS) { 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)?; self.encode_special(&stat)?;
} else { } else {
eprintln!("skip socket: {:?}", self.full_path()); eprintln!("skip socket: {:?}", self.full_path());
self.relative_path.pop();
continue;
} }
} else { } else {
bail!( bail!(