]> git.proxmox.com Git - proxmox-backup.git/commitdiff
pxar: encoder: fix incorrect goodbye table entries and update displayed path.
authorChristian Ebner <c.ebner@proxmox.com>
Wed, 8 Jan 2020 14:14:43 +0000 (15:14 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Thu, 9 Jan 2020 09:39:41 +0000 (10:39 +0100)
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>
src/pxar/encoder.rs

index f37eac7282015f387d8cd2eb205140bad8305717..05641facd4822e941cc46960f83235db8cbe85aa 100644 (file)
@@ -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!(