From b62b6cadf4a6fa2245032cabe809023066d07fcb Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Thu, 27 Dec 2018 09:22:23 +0100 Subject: [PATCH] start implementing catar --- src/catar/format_definition.rs | 45 ++++++++++++++++++++++++++++++++++ src/lib.rs | 5 ++++ 2 files changed, 50 insertions(+) create mode 100644 src/catar/format_definition.rs diff --git a/src/catar/format_definition.rs b/src/catar/format_definition.rs new file mode 100644 index 00000000..bd52965b --- /dev/null +++ b/src/catar/format_definition.rs @@ -0,0 +1,45 @@ +use failure::*; + +const CA_FORMAT_ENTRY: u64 = 0x1396fabcea5bbb51; +const CA_FORMAT_FILENAME: u64 = 0x6dbb6ebcb3161f0b; + +const CA_FORMAT_GOODBYE: u64 = 0xdfd35c5e8327c403; +/* The end marker used in the GOODBYE object */ +const CA_FORMAT_GOODBYE_TAIL_MARKER: u64 = 0x57446fa533702943; + +#[repr(C)] +pub struct CaFormatHeader { + size: u64, + htype: u64, +} + +#[repr(C)] +pub struct CaFormatEntry { + feature_flags: u64, + mode: u64, + flags: u64, + uid: u64, + gid: u64, + mtime: u64, +} + +#[repr(C)] +pub struct CaFormatGoodbyeItem { + offset: u64, + size: u64, + hash: u64, +} + +fn read_os_string(buffer: &[u8]) -> std::ffi::OsString { + let len = buffer.len(); + + use std::os::unix::ffi::OsStrExt; + + let name = if len > 0 && buffer[len-1] == 0 { + std::ffi::OsStr::from_bytes(&buffer[0..len-1]) + } else { + std::ffi::OsStr::from_bytes(&buffer) + }; + + name.into() +} diff --git a/src/lib.rs b/src/lib.rs index cbf90d39..0d9ea664 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -30,6 +30,11 @@ pub mod server { } +pub mod catar { + + pub mod format_definition; +} + pub mod section_config; pub mod backup {