src/bin/pxar.rs: implement dump/list

This commit is contained in:
Dietmar Maurer
2019-03-14 17:43:11 +01:00
parent 40360fde6e
commit 37940aa1f9
2 changed files with 126 additions and 94 deletions

View File

@ -9,70 +9,30 @@ use proxmox_backup::api_schema::router::*;
use serde_json::{Value};
use std::io::{Read, Write};
use std::io::Write;
use std::path::PathBuf;
use proxmox_backup::pxar::format_definition::*;
use proxmox_backup::pxar::encoder::*;
use proxmox_backup::pxar::decoder::*;
use proxmox_backup::tools::*;
fn print_goodby_entries(buffer: &[u8]) -> Result<(), Error> {
println!("GOODBY START: {}", buffer.len());
let entry_size = std::mem::size_of::<CaFormatGoodbyeItem>();
if (buffer.len() % entry_size) != 0 {
bail!("unexpected goodby item size ({})", entry_size);
}
let mut pos = 0;
while pos < buffer.len() {
let item = map_struct::<CaFormatGoodbyeItem>(&buffer[pos..pos+entry_size])?;
if item.hash == CA_FORMAT_GOODBYE_TAIL_MARKER {
println!(" Entry Offset: {}", item.offset);
if item.size != (buffer.len() + 16) as u64 {
bail!("gut unexpected goodby entry size (tail marker)");
}
} else {
println!(" Offset: {}", item.offset);
println!(" Size: {}", item.size);
println!(" Hash: {:016x}", item.hash);
}
pos += entry_size;
}
Ok(())
}
fn print_filenames(
_param: Value,
param: Value,
_info: &ApiMethod,
_rpcenv: &mut RpcEnvironment,
) -> Result<Value, Error> {
/* FIXME
let archive = tools::required_string_param(&param, "archive")?;
let file = std::fs::File::open(archive)?;
let mut reader = std::io::BufReader::new(file);
let mut decoder = PxarDecoder::new(&mut reader)?;
let root = decoder.root();
let mut decoder = PxarDecoder::new(&mut reader);
let stdout = std::io::stdout();
let mut out = stdout.lock();
decoder.print_filenames(&mut out, &mut PathBuf::from("."), &root)?;
*/
panic!("not implemented");
let mut path = PathBuf::from(".");
decoder.dump_entry(&mut path, false, &mut out)?;
Ok(Value::Null)
}
@ -95,7 +55,8 @@ fn dump_archive(
println!("PXAR dump: {}", archive);
decoder.dump_archive(&mut out);
let mut path = PathBuf::new();
decoder.dump_entry(&mut path, true, &mut out)?;
Ok(Value::Null)
}