5
0
mirror of git://git.proxmox.com/git/proxmox-backup.git synced 2025-02-25 17:57:35 +03:00

pxar: pass feature_flags to encoder/decoder instead of individual flags

Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
This commit is contained in:
Christian Ebner 2019-05-23 13:10:20 +02:00 committed by Dietmar Maurer
parent 687407741b
commit b344461b33
7 changed files with 30 additions and 35 deletions

View File

@ -25,9 +25,10 @@ fn print_filenames(
let mut reader = std::io::BufReader::new(file); let mut reader = std::io::BufReader::new(file);
let no_xattrs = true; let mut feature_flags = pxar::CA_FORMAT_DEFAULT;
let no_fcaps = true; feature_flags ^= pxar::CA_FORMAT_WITH_XATTRS;
let mut decoder = pxar::SequentialDecoder::new(&mut reader, no_xattrs, no_fcaps); feature_flags ^= pxar::CA_FORMAT_WITH_FCAPS;
let mut decoder = pxar::SequentialDecoder::new(&mut reader, feature_flags);
let stdout = std::io::stdout(); let stdout = std::io::stdout();
let mut out = stdout.lock(); let mut out = stdout.lock();
@ -49,9 +50,10 @@ fn dump_archive(
let mut reader = std::io::BufReader::new(file); let mut reader = std::io::BufReader::new(file);
let no_xattrs = true; let mut feature_flags = pxar::CA_FORMAT_DEFAULT;
let no_fcaps = true; feature_flags ^= pxar::CA_FORMAT_WITH_XATTRS;
let mut decoder = pxar::SequentialDecoder::new(&mut reader, no_xattrs, no_fcaps); feature_flags ^= pxar::CA_FORMAT_WITH_FCAPS;
let mut decoder = pxar::SequentialDecoder::new(&mut reader, feature_flags);
let stdout = std::io::stdout(); let stdout = std::io::stdout();
let mut out = stdout.lock(); let mut out = stdout.lock();
@ -79,8 +81,15 @@ fn extract_archive(
let file = std::fs::File::open(archive)?; let file = std::fs::File::open(archive)?;
let mut reader = std::io::BufReader::new(file); 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| { decoder.restore(Path::new(target), & |path| {
if verbose { if verbose {
@ -116,8 +125,15 @@ fn create_archive(
.open(archive)?; .open(archive)?;
let mut writer = std::io::BufWriter::with_capacity(1024*1024, file); let mut writer = std::io::BufWriter::with_capacity(1024*1024, 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;
}
pxar::Encoder::encode(source, &mut dir, &mut writer, all_file_systems, verbose, no_xattrs, no_fcaps)?; pxar::Encoder::encode(source, &mut dir, &mut writer, all_file_systems, verbose, feature_flags)?;
writer.flush()?; writer.flush()?;

View File

@ -43,9 +43,7 @@ impl PxarBackupStream {
let child = thread::spawn(move|| { let child = thread::spawn(move|| {
let mut writer = unsafe { std::fs::File::from_raw_fd(tx) }; let mut writer = unsafe { std::fs::File::from_raw_fd(tx) };
let no_xattrs = false; if let Err(err) = pxar::Encoder::encode(path, &mut dir, &mut writer, all_file_systems, verbose, pxar::CA_FORMAT_DEFAULT) {
let no_fcaps = false;
if let Err(err) = pxar::Encoder::encode(path, &mut dir, &mut writer, all_file_systems, verbose, no_xattrs, no_fcaps) {
eprintln!("pxar encode failed - {}", err); eprintln!("pxar encode failed - {}", err);
} }
}); });

View File

@ -31,9 +31,7 @@ impl PxarDecodeWriter {
let child = thread::spawn(move|| { let child = thread::spawn(move|| {
let mut reader = unsafe { std::fs::File::from_raw_fd(rx) }; let mut reader = unsafe { std::fs::File::from_raw_fd(rx) };
let no_xattrs = false; let mut decoder = pxar::SequentialDecoder::new(&mut reader, pxar::CA_FORMAT_DEFAULT);
let no_fcaps = false;
let mut decoder = pxar::SequentialDecoder::new(&mut reader, no_xattrs, no_fcaps);
if let Err(err) = decoder.restore(&base, & |path| { if let Err(err) = decoder.restore(&base, & |path| {
if verbose { if verbose {

View File

@ -34,11 +34,9 @@ impl <'a, R: Read + Seek> Decoder<'a, R> {
pub fn new(reader: &'a mut R) -> Result<Self, Error> { pub fn new(reader: &'a mut R) -> Result<Self, Error> {
let root_end = reader.seek(SeekFrom::End(0))?; let root_end = reader.seek(SeekFrom::End(0))?;
let no_xattrs = false;
let no_fcaps = false;
Ok(Self { Ok(Self {
inner: SequentialDecoder::new(reader, no_xattrs, no_fcaps), inner: SequentialDecoder::new(reader, CA_FORMAT_DEFAULT),
root_start: 0, root_start: 0,
root_end: root_end, root_end: root_end,
}) })

View File

@ -64,8 +64,7 @@ impl <'a, W: Write> Encoder<'a, W> {
writer: &'a mut W, writer: &'a mut W,
all_file_systems: bool, all_file_systems: bool,
verbose: bool, verbose: bool,
no_xattrs: bool, feature_flags: u64,
no_fcaps: bool,
) -> Result<(), Error> { ) -> Result<(), Error> {
const FILE_COPY_BUFFER_SIZE: usize = 1024*1024; 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) { if is_virtual_file_system(magic) {
bail!("backup virtual file systems is disabled!"); 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 { let mut me = Self {
base_path: path, base_path: path,

View File

@ -36,15 +36,8 @@ const HEADER_SIZE: u64 = std::mem::size_of::<CaFormatHeader>() as u64;
impl <'a, R: Read> SequentialDecoder<'a, R> { 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 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 { Self {
reader, reader,

View File

@ -26,7 +26,7 @@ fn run_test(dir_name: &str) -> Result<(), Error> {
let path = std::path::PathBuf::from(dir_name); 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") Command::new("cmp")
.arg("--verbose") .arg("--verbose")