Skip to content

Commit

Permalink
Remove 'mutable' argument to gen_skel_map_defs()
Browse files Browse the repository at this point in the history
There is not too much of a point in passing in the desired mutability to
gen_skel_map_defs() when all call sites invoke it with both true and
false.
Move the logic for dealing with mutability into the function itself to
shield callers from the need to care.

Signed-off-by: Daniel Müller <[email protected]>
  • Loading branch information
d-e-s-o authored and danielocfb committed Nov 21, 2023
1 parent 0708271 commit f22d568
Showing 1 changed file with 54 additions and 51 deletions.
105 changes: 54 additions & 51 deletions libbpf-cargo/src/gen/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -267,66 +267,71 @@ fn gen_skel_map_defs(
object: &mut BpfObj,
obj_name: &str,
open: bool,
mutable: bool,
) -> Result<()> {
if MapIter::new(object.as_mut_ptr()).next().is_none() {
return Ok(());
}

let (struct_suffix, mut_prefix, map_fn) = if mutable {
("Mut", "mut ", "map_mut")
} else {
("", "", "map")
};

let (struct_name, inner_ty, return_ty) = if open {
(
format!("Open{obj_name}Maps{struct_suffix}"),
"libbpf_rs::OpenObject",
"libbpf_rs::OpenMap",
)
} else {
(
format!("{obj_name}Maps{struct_suffix}"),
"libbpf_rs::Object",
"libbpf_rs::Map",
)
};

write!(
skel,
r#"
pub struct {struct_name}<'a> {{
inner: &'a {mut_prefix}{inner_ty},
}}
let mut gen = |mutable| -> Result<()> {
if MapIter::new(object.as_mut_ptr()).next().is_none() {
return Ok(());
}

impl {struct_name}<'_> {{
"#,
)?;
let (struct_suffix, mut_prefix, map_fn) = if mutable {
("Mut", "mut ", "map_mut")
} else {
("", "", "map")
};

for map in MapIter::new(object.as_mut_ptr()) {
let map_name = match get_map_name(map)? {
Some(n) => n,
None => continue,
let (struct_name, inner_ty, return_ty) = if open {
(
format!("Open{obj_name}Maps{struct_suffix}"),
"libbpf_rs::OpenObject",
"libbpf_rs::OpenMap",
)
} else {
(
format!("{obj_name}Maps{struct_suffix}"),
"libbpf_rs::Object",
"libbpf_rs::Map",
)
};

write!(
skel,
r#"
pub fn {map_name}(&{mut_prefix}self) -> &{mut_prefix}{return_ty} {{
self.inner.{map_fn}("{raw_map_name}").unwrap()
pub struct {struct_name}<'a> {{
inner: &'a {mut_prefix}{inner_ty},
}}
impl {struct_name}<'_> {{
"#,
map_name = map_name,
raw_map_name = get_raw_map_name(map)?,
return_ty = return_ty,
mut_prefix = mut_prefix,
map_fn = map_fn
)?;
}

writeln!(skel, "}}")?;
for map in MapIter::new(object.as_mut_ptr()) {
let map_name = match get_map_name(map)? {
Some(n) => n,
None => continue,
};

write!(
skel,
r#"
pub fn {map_name}(&{mut_prefix}self) -> &{mut_prefix}{return_ty} {{
self.inner.{map_fn}("{raw_map_name}").unwrap()
}}
"#,
map_name = map_name,
raw_map_name = get_raw_map_name(map)?,
return_ty = return_ty,
mut_prefix = mut_prefix,
map_fn = map_fn
)?;
}

writeln!(skel, "}}")?;

Ok(())
};

let () = gen(true)?;
let () = gen(false)?;
Ok(())
}

Expand Down Expand Up @@ -745,8 +750,7 @@ fn gen_skel_contents(_debug: bool, raw_obj_name: &str, obj_file_path: &Path) ->
name = obj_name
)?;

gen_skel_map_defs(&mut skel, &mut object, &obj_name, true, false)?;
gen_skel_map_defs(&mut skel, &mut object, &obj_name, true, true)?;
gen_skel_map_defs(&mut skel, &mut object, &obj_name, true)?;
gen_skel_prog_defs(&mut skel, &mut object, &obj_name, true, false)?;
gen_skel_prog_defs(&mut skel, &mut object, &obj_name, true, true)?;
gen_skel_datasec_defs(&mut skel, raw_obj_name, &mmap)?;
Expand Down Expand Up @@ -799,8 +803,7 @@ fn gen_skel_contents(_debug: bool, raw_obj_name: &str, obj_file_path: &Path) ->
gen_skel_datasec_getters(&mut skel, &mut object, raw_obj_name, false)?;
writeln!(skel, "}}")?;

gen_skel_map_defs(&mut skel, &mut object, &obj_name, false, false)?;
gen_skel_map_defs(&mut skel, &mut object, &obj_name, false, true)?;
gen_skel_map_defs(&mut skel, &mut object, &obj_name, false)?;
gen_skel_prog_defs(&mut skel, &mut object, &obj_name, false, false)?;
gen_skel_prog_defs(&mut skel, &mut object, &obj_name, false, true)?;
gen_skel_link_defs(&mut skel, &mut object, &obj_name)?;
Expand Down

0 comments on commit f22d568

Please sign in to comment.