pub mod binary_search_tree;
pub mod format_definition;
pub mod encoder;
+pub mod decoder;
) {
if n == 0 { return };
let e = (64 - n.leading_zeros() - 1) as usize; // fast log2(n)
+
copy_binary_search_tree_inner(&mut copy_func, n, 0, e, 0);
}
--- /dev/null
+///! *catar* format decoder.
+
+
use nix::errno::Errno;
use nix::sys::stat::FileStat;
-use siphasher::sip::SipHasher24;
-
/// The format requires to build sorted directory lookup tables in
/// memory, so we restrict the number of allowed entries to limit
/// maximum memory usage.
goodbye_items.push(CaFormatGoodbyeItem {
offset: start_pos as u64,
size: (end_pos - start_pos) as u64,
- hash: compute_goodbye_hash(&filename),
+ hash: compute_goodbye_hash(filename.to_bytes()),
});
self.current_path.pop();
Ok(())
}
}
-
-fn compute_goodbye_hash(name: &CStr) -> u64 {
-
- use std::hash::Hasher;
- let mut hasher = SipHasher24::new_with_keys(0x8574442b0f1d84b3, 0x2736ed30d1c22ec1);
- hasher.write(name.to_bytes());
- hasher.finish()
-}
use failure::*;
+use siphasher::sip::SipHasher24;
+
pub const CA_FORMAT_ENTRY: u64 = 0x1396fabcea5bbb51;
pub const CA_FORMAT_FILENAME: u64 = 0x6dbb6ebcb3161f0b;
pub const CA_FORMAT_SYMLINK: u64 = 0x664a6fb6830e0d6c;
pub hash: u64,
}
-fn read_os_string(buffer: &[u8]) -> std::ffi::OsString {
+
+/// Helper function to extract file names from binary archive.
+pub fn read_os_string(buffer: &[u8]) -> std::ffi::OsString {
let len = buffer.len();
use std::os::unix::ffi::OsStrExt;
name.into()
}
+
+/// Create SipHash values for goodby tables.
+//pub fn compute_goodbye_hash(name: &std::ffi::CStr) -> u64 {
+pub fn compute_goodbye_hash(name: &[u8]) -> u64 {
+
+ use std::hash::Hasher;
+ let mut hasher = SipHasher24::new_with_keys(0x8574442b0f1d84b3, 0x2736ed30d1c22ec1);
+ hasher.write(name);
+ hasher.finish()
+}
run_test("tests/catar_data/test_subdir")?;
+ run_test("tests/catar_data/test1")?;
+
Ok(())
}