modified: src/main.rs

This commit is contained in:
Michael Wain 2025-02-08 02:49:32 +03:00
parent 088c1dbfa0
commit 84f5824411
2 changed files with 16 additions and 5 deletions

BIN
outdb

Binary file not shown.

View File

@ -245,6 +245,7 @@ pub fn parse_bytes(data: &[u8]) -> XDatabase {
let db: Database = bincode::deserialize(&data[i..i+u]).unwrap(); let db: Database = bincode::deserialize(&data[i..i+u]).unwrap();
info!("val: {:?}", db); info!("val: {:?}", db);
xdb.data = Some(db); xdb.data = Some(db);
xdb.header = Some(header);
}, },
ChunkType::DataSet => { ChunkType::DataSet => {
u = usize::try_from(header.end_of_chunk).unwrap() - 12; u = usize::try_from(header.end_of_chunk).unwrap() - 12;
@ -407,6 +408,15 @@ fn generate_header(ct: ChunkType, header_size: usize, data_len: usize) -> Vec<u8
let header = ChunkHeader{ chunk_type: ct.into(), end_of_chunk: header_size, children_count: header_size + data_len as u32}; let header = ChunkHeader{ chunk_type: ct.into(), end_of_chunk: header_size, children_count: header_size + data_len as u32};
bincode::serialize(&header).unwrap() bincode::serialize(&header).unwrap()
} }
fn generate_zeroes(cnt: u32) -> Vec<u8> {
let mut v: Vec<u8> = Vec::new();
for i in 0..cnt-12 {
v.push(0x00);
}
v
}
/* /*
[lib] [lib]
crate-type = ["staticlib", "cdylib", "lib"] crate-type = ["staticlib", "cdylib", "lib"]
@ -469,8 +479,9 @@ fn to_bytes(xdb: XDatabase) -> Vec<u8> {
} }
let sdb = bincode::serialize(&xdb.data.unwrap()).unwrap(); let sdb = bincode::serialize(&xdb.data.unwrap()).unwrap();
let sdb_len = sdb.len(); let sdb_len = sdb.len();
bytes = [sdb, bytes].concat(); let h = xdb.header.unwrap();
bytes = [generate_header(ChunkType::Database, sdb_len, bytes.len()), bytes].concat(); bytes = [sdb, generate_zeroes(h.end_of_chunk - sdb_len as u32), bytes].concat();
bytes = [generate_header(ChunkType::Database, (h.end_of_chunk - 12) as usize, bytes.len()), bytes].concat();
bytes bytes
} }
@ -481,14 +492,14 @@ fn main() {
.filter(None, LevelFilter::Info) .filter(None, LevelFilter::Info)
.init(); .init();
let mut f = File::open("D:\\Documents\\iTunes\\iTunesDB").unwrap(); // D:\\Documents\\iTunes\\iTunesDB let mut f = File::open("outdb").unwrap(); // D:\\Documents\\iTunes\\iTunesDB
let mut buf = Vec::new(); let mut buf = Vec::new();
match f.read_to_end(&mut buf) { match f.read_to_end(&mut buf) {
Ok(n) => { Ok(n) => {
let data = &buf[..n]; let data = &buf[..n];
let xdb = parse_bytes(data); let xdb = parse_bytes(data);
let mut op = File::create("outdb").unwrap(); //let mut op = File::create("outdb").unwrap();
info!("Write res: {:?}", op.write(&to_bytes(xdb))); //info!("Write res: {:?}", op.write(&to_bytes(xdb)));
}, },
Err(e) => { Err(e) => {
error!("Error: {}",e); error!("Error: {}",e);