]> git.proxmox.com Git - proxmox-backup.git/commitdiff
catar cleanups ...
authorDietmar Maurer <dietmar@proxmox.com>
Sun, 30 Dec 2018 16:32:52 +0000 (17:32 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Sun, 30 Dec 2018 16:32:52 +0000 (17:32 +0100)
src/catar.rs
src/catar/binary_search_tree.rs
src/catar/decoder.rs [new file with mode: 0644]
src/catar/encoder.rs
src/catar/format_definition.rs
tests/catar.rs

index 22a87a244f1fd309d886a26108b5a33b710dcd5f..a9688c639bf7c17a1a995ddbb00c8f0d8d3f30b1 100644 (file)
@@ -40,4 +40,5 @@
 pub mod binary_search_tree;
 pub mod format_definition;
 pub mod encoder;
+pub mod decoder;
 
index 035eab54feb4e03c01f213f28e69c5baeac63e84..7cad3e6dcff9dde181e4103019bb2139187c7652 100644 (file)
@@ -86,6 +86,7 @@ pub fn copy_binary_search_tree<F:  FnMut(usize, usize)>(
 ) {
     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);
 }
 
diff --git a/src/catar/decoder.rs b/src/catar/decoder.rs
new file mode 100644 (file)
index 0000000..b80f4cc
--- /dev/null
@@ -0,0 +1,3 @@
+///! *catar* format decoder.
+
+
index 8ace30cf0ac3247470701403373657c7f432b890..c7d3d5594b1f0148221608950cba87554703e0a8 100644 (file)
@@ -21,8 +21,6 @@ use nix::sys::stat::Mode;
 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.
@@ -264,7 +262,7 @@ impl <W: Write> CaTarEncoder<W> {
             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();
@@ -357,11 +355,3 @@ impl <W: Write> CaTarEncoder<W> {
         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()
-}
index 755b3fee863a436b87ccae6f5e050a3cd0bbe137..30cb6bc54e3708e51a86351b86c726c9d965e576 100644 (file)
@@ -7,6 +7,8 @@
 
 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;
@@ -51,7 +53,9 @@ pub struct CaFormatGoodbyeItem {
     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;
@@ -64,3 +68,13 @@ fn read_os_string(buffer: &[u8]) -> std::ffi::OsString {
 
     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()
+}
index 0a6a5a9dec113dbc6e76821156c3a5cb764fa2ee..40e10854a136e5804beedb599eb1522175353bce 100644 (file)
@@ -46,6 +46,8 @@ fn run_all_tests() -> Result<(), Error> {
 
     run_test("tests/catar_data/test_subdir")?;
 
+    run_test("tests/catar_data/test1")?;
+
     Ok(())
 }