modified: src/main.rs
This commit is contained in:
parent
088c1dbfa0
commit
84f5824411
21
src/main.rs
21
src/main.rs
@ -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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user