ghostscope_process/
cookie.rs1use object::Object;
2use std::fs;
3
4pub fn from_path(module_path: &str) -> u64 {
7 if let Ok(bytes) = fs::read(module_path) {
9 if let Ok(obj) = object::File::parse(&bytes[..]) {
10 if let Ok(Some(build_id)) = obj.build_id() {
11 use std::collections::hash_map::DefaultHasher;
12 use std::hash::{Hash, Hasher};
13 let mut hasher = DefaultHasher::new();
14 build_id.hash(&mut hasher);
15 return hasher.finish();
16 }
17 }
18 }
19 #[cfg(target_os = "linux")]
21 {
22 use std::os::unix::fs::MetadataExt;
23 if let Ok(meta) = fs::metadata(module_path) {
24 let dev = meta.dev();
25 let ino = meta.ino();
26 return ((dev & 0xffff_ffff) << 32) | (ino & 0xffff_ffff);
27 }
28 }
29 use std::collections::hash_map::DefaultHasher;
31 use std::hash::{Hash, Hasher};
32 let mut hasher = DefaultHasher::new();
33 module_path.hash(&mut hasher);
34 hasher.finish()
35}