fstat_hook.rs (1131B) - raw
1 2 use std::fs; 3 4 use nix::libc; 5 6 use crate::{config::{self, native_config}, def_hook, dobby_hook_sym}; 7 8 def_hook!( 9 fstat_hook, 10 i32, 11 |fd: i32, statbuf: *mut libc::stat| { 12 if let Ok(link) = fs::read_link("/proc/self/fd/".to_owned() + &fd.to_string()) { 13 if let Some(filename) = link.file_name().map(|t| t.to_string_lossy()) { 14 let config = native_config(); 15 if config.disable_metrics && filename.contains("files/blizzardv2/queues") { 16 if libc::unlink((filename.to_owned() + "\0").as_ptr()) == -1 { 17 warn!("Failed to unlink {}", filename); 18 } 19 return -1; 20 } 21 22 if config.disable_bitmoji && filename.contains("com.snap.file_manager_4_SCContent") { 23 return -1; 24 } 25 } 26 } 27 28 fstat_hook_original.unwrap()(fd, statbuf) 29 } 30 ); 31 32 pub fn init() { 33 let config = config::native_config(); 34 if config.disable_metrics || config.disable_bitmoji { 35 dobby_hook_sym!("libc.so", "fstat", fstat_hook); 36 } 37 }