fix #2998: encode mtime as i64 instead of u64
saves files mtime as i64 instead of u64 which enables backup of files with negative mtime the catalog_decode_i64 is compatible to encoded u64 values (if < 2^63) but not reverse, so all "old" catalogs can be read with the new decoder, but catalogs that contain negative mtimes will decode wrongly on older clients also remove the arbitrary maximum value of 2^63 - 1 for encode_u64 (we just use up to 10 bytes now) and correctly decode them and update the comments accordingly adds also test for i64 encode/decode and for compatibility between u64 encode and i64 decode Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
This commit is contained in:
committed by
Dietmar Maurer
parent
d771a608f5
commit
5499bd3dee
@ -9,7 +9,7 @@ use std::ffi::CStr;
|
||||
pub trait BackupCatalogWriter {
|
||||
fn start_directory(&mut self, name: &CStr) -> Result<(), Error>;
|
||||
fn end_directory(&mut self) -> Result<(), Error>;
|
||||
fn add_file(&mut self, name: &CStr, size: u64, mtime: u64) -> Result<(), Error>;
|
||||
fn add_file(&mut self, name: &CStr, size: u64, mtime: i64) -> Result<(), Error>;
|
||||
fn add_symlink(&mut self, name: &CStr) -> Result<(), Error>;
|
||||
fn add_hardlink(&mut self, name: &CStr) -> Result<(), Error>;
|
||||
fn add_block_device(&mut self, name: &CStr) -> Result<(), Error>;
|
||||
|
@ -535,7 +535,7 @@ impl<'a, 'b> Archiver<'a, 'b> {
|
||||
|
||||
let file_size = stat.st_size as u64;
|
||||
if let Some(ref mut catalog) = self.catalog {
|
||||
catalog.add_file(c_file_name, file_size, stat.st_mtime as u64)?;
|
||||
catalog.add_file(c_file_name, file_size, stat.st_mtime)?;
|
||||
}
|
||||
|
||||
let offset: LinkOffset =
|
||||
|
Reference in New Issue
Block a user