Line data Source code
1 : use super::Command;
2 : use crate::common::FromFFI;
3 : use lief_ffi as ffi;
4 : use std::marker::PhantomData;
5 :
6 :
7 : pub struct Fileset<'a> {
8 : ptr: cxx::UniquePtr<ffi::MachO_Fileset>,
9 : _owner: PhantomData<&'a ffi::MachO_Binary>,
10 : }
11 :
12 : impl Fileset<'_> {
13 7032 : pub fn name(&self) -> String {
14 7032 : self.ptr.name().to_string()
15 7032 : }
16 :
17 7032 : pub fn virtual_address(&self) -> u64 {
18 7032 : self.ptr.virtual_address()
19 7032 : }
20 :
21 7032 : pub fn file_offset(&self) -> u64 {
22 7032 : self.ptr.file_offset()
23 7032 : }
24 : }
25 :
26 : impl std::fmt::Debug for Fileset<'_> {
27 7032 : fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
28 7032 : let base = self as &dyn Command;
29 7032 : f.debug_struct("Note")
30 7032 : .field("base", &base)
31 7032 : .field("name", &self.name())
32 7032 : .field("virtual_address", &self.virtual_address())
33 7032 : .field("file_offset", &self.file_offset())
34 7032 : .finish()
35 7032 : }
36 : }
37 :
38 : impl<'a> FromFFI<ffi::MachO_Fileset> for Fileset<'a> {
39 3516 : fn from_ffi(cmd: cxx::UniquePtr<ffi::MachO_Fileset>) -> Self {
40 3516 : Self {
41 3516 : ptr: cmd,
42 3516 : _owner: PhantomData,
43 3516 : }
44 3516 : }
45 : }
46 :
47 : impl Command for Fileset<'_> {
48 28128 : fn get_base(&self) -> &ffi::MachO_Command {
49 28128 : self.ptr.as_ref().unwrap().as_ref()
50 28128 : }
51 : }
|