diff --git a/src/dump.rs b/src/dump.rs new file mode 100644 index 0000000..68f4f7d --- /dev/null +++ b/src/dump.rs @@ -0,0 +1,41 @@ +use std::cmp; +use std::fmt::Write; + +#[allow(dead_code)] +fn dump(data: &[u8]) -> String { + let mut output = String::new(); + + if data.is_empty() { + output.push_str("\t--- Empty ---"); + } + + for i in (0..data.len()).step_by(16) { + let to_print = cmp::min(16, data.len() - i); + let to_pad = 16 - to_print; + let data = &data[i..i + to_print]; + + let _ = write!(output, " {:08x}", i); + + for byte in data { + let _ = write!(output, " {:02x}", byte); + } + + for _ in 0..to_pad { + output.push_str(" "); + } + + output.push(' '); + output.extend(data.iter().map(|&c| { + if c < 0x20 || c >= 0x7f { + '.' + } else { + c as char + } + })); + output.push('\n'); + } + + output.push('\n'); + + output +} diff --git a/src/lib.rs b/src/lib.rs index 72c358c..d7c7b24 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -19,6 +19,7 @@ use std::str; use libc::RTLD_NEXT; use serde::Deserialize; +mod dump; mod format; mod log;