From e383752b67610acaed6dd81d2701b4f237f742c8 Mon Sep 17 00:00:00 2001 From: Friedel Ziegelmayer Date: Mon, 27 May 2019 11:59:25 +0200 Subject: [PATCH] Filbytes fix (#85) * test(sqlite): add some tests for houskeeping methods * fix(tools): handle faile metadata call --- src/dc_sqlite3.rs | 58 +++++++++++++++++++++++++++++++++++++++++++++++ src/dc_tools.rs | 13 +++++++---- 2 files changed, 66 insertions(+), 5 deletions(-) diff --git a/src/dc_sqlite3.rs b/src/dc_sqlite3.rs index 692731251..24c573536 100644 --- a/src/dc_sqlite3.rs +++ b/src/dc_sqlite3.rs @@ -1614,3 +1614,61 @@ unsafe fn maybe_add_from_param( sqlite3_finalize(stmt); dc_param_unref(param); } + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn test_maybe_add_file() { + let mut files = Default::default(); + unsafe { maybe_add_file(&mut files, b"$BLOBDIR/hello\x00" as *const u8 as *const _) }; + unsafe { + maybe_add_file( + &mut files, + b"$BLOBDIR/world.txt\x00" as *const u8 as *const _, + ) + }; + unsafe { maybe_add_file(&mut files, b"world2.txt\x00" as *const u8 as *const _) }; + + assert!(files.contains("hello")); + assert!(files.contains("world.txt")); + assert!(!files.contains("world2.txt")); + } + + #[test] + fn test_is_file_in_use() { + let mut files = Default::default(); + unsafe { maybe_add_file(&mut files, b"$BLOBDIR/hello\x00" as *const u8 as *const _) }; + unsafe { + maybe_add_file( + &mut files, + b"$BLOBDIR/world.txt\x00" as *const u8 as *const _, + ) + }; + unsafe { maybe_add_file(&mut files, b"world2.txt\x00" as *const u8 as *const _) }; + + println!("{:?}", files); + assert!(unsafe { + is_file_in_use( + &mut files, + std::ptr::null(), + b"hello\x00" as *const u8 as *const _, + ) + }); + assert!(!unsafe { + is_file_in_use( + &mut files, + b".txt\x00" as *const u8 as *const _, + b"hello\x00" as *const u8 as *const _, + ) + }); + assert!(unsafe { + is_file_in_use( + &mut files, + b"-suffix\x00" as *const u8 as *const _, + b"world.txt-suffix\x00" as *const u8 as *const _, + ) + }); + } +} diff --git a/src/dc_tools.rs b/src/dc_tools.rs index 7c9bb1d9f..d6b1f6933 100644 --- a/src/dc_tools.rs +++ b/src/dc_tools.rs @@ -1323,11 +1323,14 @@ pub unsafe fn dc_get_filebytes( return 0; } - let filebytes = { - let p = std::ffi::CStr::from_ptr(pathNfilename_abs) - .to_str() - .unwrap(); - fs::metadata(p).unwrap().len() + let p = std::ffi::CStr::from_ptr(pathNfilename_abs) + .to_str() + .unwrap(); + let filebytes = match fs::metadata(p) { + Ok(meta) => meta.len(), + Err(_err) => { + return 0; + } }; free(pathNfilename_abs as *mut libc::c_void);