From b344461b3318e8a082832956675065ceb20648a3 Mon Sep 17 00:00:00 2001 From: Christian Ebner Date: Thu, 23 May 2019 13:10:20 +0200 Subject: [PATCH] pxar: pass feature_flags to encoder/decoder instead of individual flags Signed-off-by: Christian Ebner --- src/bin/pxar.rs | 34 +++++++++++++++++++++++--------- src/client/pxar_backup_stream.rs | 4 +--- src/client/pxar_decode_writer.rs | 4 +--- src/pxar/decoder.rs | 4 +--- src/pxar/encoder.rs | 10 +--------- src/pxar/sequential_decoder.rs | 9 +-------- tests/catar.rs | 2 +- 7 files changed, 31 insertions(+), 36 deletions(-) diff --git a/src/bin/pxar.rs b/src/bin/pxar.rs index ff6e2242..e5184bc7 100644 --- a/src/bin/pxar.rs +++ b/src/bin/pxar.rs @@ -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()?; diff --git a/src/client/pxar_backup_stream.rs b/src/client/pxar_backup_stream.rs index c0cd193f..e25ee0b4 100644 --- a/src/client/pxar_backup_stream.rs +++ b/src/client/pxar_backup_stream.rs @@ -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); } }); diff --git a/src/client/pxar_decode_writer.rs b/src/client/pxar_decode_writer.rs index 32fb1dd8..ba708d91 100644 --- a/src/client/pxar_decode_writer.rs +++ b/src/client/pxar_decode_writer.rs @@ -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 { diff --git a/src/pxar/decoder.rs b/src/pxar/decoder.rs index 22ac01dd..3820fb5a 100644 --- a/src/pxar/decoder.rs +++ b/src/pxar/decoder.rs @@ -34,11 +34,9 @@ impl <'a, R: Read + Seek> Decoder<'a, R> { pub fn new(reader: &'a mut R) -> Result { 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, }) diff --git a/src/pxar/encoder.rs b/src/pxar/encoder.rs index c92fd183..44454255 100644 --- a/src/pxar/encoder.rs +++ b/src/pxar/encoder.rs @@ -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, diff --git a/src/pxar/sequential_decoder.rs b/src/pxar/sequential_decoder.rs index 51b2a399..309eae7c 100644 --- a/src/pxar/sequential_decoder.rs +++ b/src/pxar/sequential_decoder.rs @@ -36,15 +36,8 @@ const HEADER_SIZE: u64 = std::mem::size_of::() 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, diff --git a/tests/catar.rs b/tests/catar.rs index 382042c1..f08c18ea 100644 --- a/tests/catar.rs +++ b/tests/catar.rs @@ -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") -- 2.39.2