]> git.proxmox.com Git - proxmox-backup.git/commitdiff
pxar: pass feature_flags to encoder/decoder instead of individual flags
authorChristian Ebner <c.ebner@proxmox.com>
Thu, 23 May 2019 11:10:20 +0000 (13:10 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Fri, 24 May 2019 04:11:36 +0000 (06:11 +0200)
Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
src/bin/pxar.rs
src/client/pxar_backup_stream.rs
src/client/pxar_decode_writer.rs
src/pxar/decoder.rs
src/pxar/encoder.rs
src/pxar/sequential_decoder.rs
tests/catar.rs

index ff6e22426074752654821c1bb88190b861eb0756..e5184bc7f0ea91e1021f5da2e2947e8ba1cd1b8b 100644 (file)
@@ -25,9 +25,10 @@ fn print_filenames(
 
     let mut reader = std::io::BufReader::new(file);
 
-    let no_xattrs = true;
-    let no_fcaps = true;
-    let mut decoder = pxar::SequentialDecoder::new(&mut reader, no_xattrs, no_fcaps);
+    let mut feature_flags = pxar::CA_FORMAT_DEFAULT;
+    feature_flags ^= pxar::CA_FORMAT_WITH_XATTRS;
+    feature_flags ^= pxar::CA_FORMAT_WITH_FCAPS;
+    let mut decoder = pxar::SequentialDecoder::new(&mut reader, feature_flags);
 
     let stdout = std::io::stdout();
     let mut out = stdout.lock();
@@ -49,9 +50,10 @@ fn dump_archive(
 
     let mut reader = std::io::BufReader::new(file);
 
-    let no_xattrs = true;
-    let no_fcaps = true;
-    let mut decoder = pxar::SequentialDecoder::new(&mut reader, no_xattrs, no_fcaps);
+    let mut feature_flags = pxar::CA_FORMAT_DEFAULT;
+    feature_flags ^= pxar::CA_FORMAT_WITH_XATTRS;
+    feature_flags ^= pxar::CA_FORMAT_WITH_FCAPS;
+    let mut decoder = pxar::SequentialDecoder::new(&mut reader, feature_flags);
 
     let stdout = std::io::stdout();
     let mut out = stdout.lock();
@@ -79,8 +81,15 @@ fn extract_archive(
     let file = std::fs::File::open(archive)?;
 
     let mut reader = std::io::BufReader::new(file);
+    let mut feature_flags = pxar::CA_FORMAT_DEFAULT;
+    if no_xattrs {
+        feature_flags ^= pxar::CA_FORMAT_WITH_XATTRS;
+    }
+    if no_fcaps {
+        feature_flags ^= pxar::CA_FORMAT_WITH_FCAPS;
+    }
 
-    let mut decoder = pxar::SequentialDecoder::new(&mut reader, no_xattrs, no_fcaps);
+    let mut decoder = pxar::SequentialDecoder::new(&mut reader, feature_flags);
 
     decoder.restore(Path::new(target), & |path| {
         if verbose {
@@ -116,8 +125,15 @@ fn create_archive(
         .open(archive)?;
 
     let mut writer = std::io::BufWriter::with_capacity(1024*1024, file);
-
-    pxar::Encoder::encode(source, &mut dir, &mut writer, all_file_systems, verbose, no_xattrs, no_fcaps)?;
+    let mut feature_flags = pxar::CA_FORMAT_DEFAULT;
+    if no_xattrs {
+        feature_flags ^= pxar::CA_FORMAT_WITH_XATTRS;
+    }
+    if no_fcaps {
+        feature_flags ^= pxar::CA_FORMAT_WITH_FCAPS;
+    }
+
+    pxar::Encoder::encode(source, &mut dir, &mut writer, all_file_systems, verbose, feature_flags)?;
 
     writer.flush()?;
 
index c0cd193f83b75124be19d8de0089d22c882161a8..e25ee0b4550ff81a09d2178c948762e19dceb89d 100644 (file)
@@ -43,9 +43,7 @@ impl PxarBackupStream {
 
         let child = thread::spawn(move|| {
             let mut writer = unsafe { std::fs::File::from_raw_fd(tx) };
-            let no_xattrs = false;
-            let no_fcaps = false;
-            if let Err(err) = pxar::Encoder::encode(path, &mut dir, &mut writer, all_file_systems, verbose, no_xattrs, no_fcaps) {
+            if let Err(err) = pxar::Encoder::encode(path, &mut dir, &mut writer, all_file_systems, verbose, pxar::CA_FORMAT_DEFAULT) {
                 eprintln!("pxar encode failed - {}", err);
             }
         });
index 32fb1dd806493ae9d29414fa86f61afa4e7c2bb8..ba708d9121da4c3c0cad337685651cb0af9f82bd 100644 (file)
@@ -31,9 +31,7 @@ impl PxarDecodeWriter {
         
         let child = thread::spawn(move|| {
             let mut reader = unsafe { std::fs::File::from_raw_fd(rx) };
-            let no_xattrs = false;
-            let no_fcaps = false;
-            let mut decoder = pxar::SequentialDecoder::new(&mut reader, no_xattrs, no_fcaps);
+            let mut decoder = pxar::SequentialDecoder::new(&mut reader, pxar::CA_FORMAT_DEFAULT);
           
             if let Err(err) = decoder.restore(&base, & |path| {
                 if verbose {
index 22ac01dde13dddb6f4652b34b01ab3140910c47c..3820fb5ace28913279087070b1116b8b1817e33b 100644 (file)
@@ -34,11 +34,9 @@ impl <'a, R: Read + Seek> Decoder<'a, R> {
     pub fn new(reader: &'a mut R) -> Result<Self, Error> {
 
         let root_end = reader.seek(SeekFrom::End(0))?;
-        let no_xattrs = false;
-        let no_fcaps = false;
 
         Ok(Self {
-            inner: SequentialDecoder::new(reader, no_xattrs, no_fcaps),
+            inner: SequentialDecoder::new(reader, CA_FORMAT_DEFAULT),
             root_start: 0,
             root_end: root_end,
         })
index c92fd18369f4b8981877db92c800e57e0f37543b..4445425526bdc12acbb68e5e9ddbf5acd506eb3a 100644 (file)
@@ -64,8 +64,7 @@ impl <'a, W: Write> Encoder<'a, W> {
         writer: &'a mut W,
         all_file_systems: bool,
         verbose: bool,
-        no_xattrs: bool,
-        no_fcaps: bool,
+        feature_flags: u64,
     ) -> Result<(), Error> {
 
         const FILE_COPY_BUFFER_SIZE: usize = 1024*1024;
@@ -91,13 +90,6 @@ impl <'a, W: Write> Encoder<'a, W> {
         if is_virtual_file_system(magic) {
             bail!("backup virtual file systems is disabled!");
         }
-        let mut feature_flags = CA_FORMAT_DEFAULT;
-        if no_xattrs {
-            feature_flags ^= CA_FORMAT_WITH_XATTRS;
-        }
-        if no_fcaps {
-            feature_flags ^= CA_FORMAT_WITH_FCAPS;
-        }
 
         let mut me = Self {
             base_path: path,
index 51b2a399dcfcf89be84aa54a782a6a2cd265b691..309eae7cf0ccfb6c4235aa6b0fe9e772c727a583 100644 (file)
@@ -36,15 +36,8 @@ const HEADER_SIZE: u64 = std::mem::size_of::<CaFormatHeader>() as u64;
 
 impl <'a, R: Read> SequentialDecoder<'a, R> {
 
-    pub fn new(reader: &'a mut R, no_xattrs: bool, no_fcaps: bool) -> Self {
+    pub fn new(reader: &'a mut R, feature_flags: u64) -> Self {
         let skip_buffer = vec::undefined(64*1024);
-        let mut feature_flags = CA_FORMAT_DEFAULT;
-        if no_xattrs {
-            feature_flags ^= CA_FORMAT_WITH_XATTRS;
-        }
-        if no_fcaps {
-            feature_flags ^= CA_FORMAT_WITH_FCAPS;
-        }
 
         Self {
             reader,
index 382042c1f39cacd1e2154aeaf26b818353c3841c..f08c18eadeb481c2670f971d97eb3327009b8394 100644 (file)
@@ -26,7 +26,7 @@ fn run_test(dir_name: &str) -> Result<(), Error> {
 
     let path = std::path::PathBuf::from(dir_name);
 
-    Encoder::encode(path, &mut dir, &mut writer, false, false, false, false)?;
+    Encoder::encode(path, &mut dir, &mut writer, false, false, CA_FORMAT_DEFAULT)?;
 
     Command::new("cmp")
         .arg("--verbose")