diff --git a/outdb b/outdb index da2cdc4..09f6c51 100644 Binary files a/outdb and b/outdb differ diff --git a/src/main.rs b/src/main.rs index 6aaad15..12a8087 100644 --- a/src/main.rs +++ b/src/main.rs @@ -245,6 +245,7 @@ pub fn parse_bytes(data: &[u8]) -> XDatabase { let db: Database = bincode::deserialize(&data[i..i+u]).unwrap(); info!("val: {:?}", db); xdb.data = Some(db); + xdb.header = Some(header); }, ChunkType::DataSet => { 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 Vec { + let mut v: Vec = Vec::new(); + for i in 0..cnt-12 { + v.push(0x00); + } + v +} + /* [lib] crate-type = ["staticlib", "cdylib", "lib"] @@ -469,8 +479,9 @@ fn to_bytes(xdb: XDatabase) -> Vec { } let sdb = bincode::serialize(&xdb.data.unwrap()).unwrap(); let sdb_len = sdb.len(); - bytes = [sdb, bytes].concat(); - bytes = [generate_header(ChunkType::Database, sdb_len, bytes.len()), bytes].concat(); + let h = xdb.header.unwrap(); + 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 } @@ -481,14 +492,14 @@ fn main() { .filter(None, LevelFilter::Info) .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(); match f.read_to_end(&mut buf) { Ok(n) => { let data = &buf[..n]; let xdb = parse_bytes(data); - let mut op = File::create("outdb").unwrap(); - info!("Write res: {:?}", op.write(&to_bytes(xdb))); + //let mut op = File::create("outdb").unwrap(); + //info!("Write res: {:?}", op.write(&to_bytes(xdb))); }, Err(e) => { error!("Error: {}",e);