use crate::{
Result,
blocks::{
read_string_block, {SourceBlock, read_source_block},
},
};
#[derive(Debug)]
pub struct SourceInfo {
pub name: Option<String>,
pub path: Option<String>,
pub comment: Option<String>,
}
impl SourceInfo {
pub fn from_mmap(mmap: &[u8], address: u64) -> Result<Option<Self>> {
if address == 0 {
return Ok(None);
}
let sb: SourceBlock = read_source_block(mmap, address)?;
let name: Option<String> = read_string_block(mmap, sb.name_addr)?;
let path: Option<String> = read_string_block(mmap, sb.path_addr)?;
let comment: Option<String> = read_string_block(mmap, sb.comment_addr)?;
Ok(Some(SourceInfo {
name,
path,
comment,
}))
}
}