@@ -267,66 +267,71 @@ fn gen_skel_map_defs(
267267 object : & mut BpfObj ,
268268 obj_name : & str ,
269269 open : bool ,
270- mutable : bool ,
271270) -> Result < ( ) > {
272- if MapIter :: new ( object. as_mut_ptr ( ) ) . next ( ) . is_none ( ) {
273- return Ok ( ( ) ) ;
274- }
275-
276- let ( struct_suffix, mut_prefix, map_fn) = if mutable {
277- ( "Mut" , "mut " , "map_mut" )
278- } else {
279- ( "" , "" , "map" )
280- } ;
281-
282- let ( struct_name, inner_ty, return_ty) = if open {
283- (
284- format ! ( "Open{obj_name}Maps{struct_suffix}" ) ,
285- "libbpf_rs::OpenObject" ,
286- "libbpf_rs::OpenMap" ,
287- )
288- } else {
289- (
290- format ! ( "{obj_name}Maps{struct_suffix}" ) ,
291- "libbpf_rs::Object" ,
292- "libbpf_rs::Map" ,
293- )
294- } ;
295-
296- write ! (
297- skel,
298- r#"
299- pub struct {struct_name}<'a> {{
300- inner: &'a {mut_prefix}{inner_ty},
301- }}
271+ let mut gen = |mutable| -> Result < ( ) > {
272+ if MapIter :: new ( object. as_mut_ptr ( ) ) . next ( ) . is_none ( ) {
273+ return Ok ( ( ) ) ;
274+ }
302275
303- impl {struct_name}<'_> {{
304- "# ,
305- ) ?;
276+ let ( struct_suffix, mut_prefix, map_fn) = if mutable {
277+ ( "Mut" , "mut " , "map_mut" )
278+ } else {
279+ ( "" , "" , "map" )
280+ } ;
306281
307- for map in MapIter :: new ( object. as_mut_ptr ( ) ) {
308- let map_name = match get_map_name ( map) ? {
309- Some ( n) => n,
310- None => continue ,
282+ let ( struct_name, inner_ty, return_ty) = if open {
283+ (
284+ format ! ( "Open{obj_name}Maps{struct_suffix}" ) ,
285+ "libbpf_rs::OpenObject" ,
286+ "libbpf_rs::OpenMap" ,
287+ )
288+ } else {
289+ (
290+ format ! ( "{obj_name}Maps{struct_suffix}" ) ,
291+ "libbpf_rs::Object" ,
292+ "libbpf_rs::Map" ,
293+ )
311294 } ;
312295
313296 write ! (
314297 skel,
315298 r#"
316- pub fn {map_name}(&{mut_prefix}self) -> &{mut_prefix}{return_ty} {{
317- self. inner.{map_fn}("{raw_map_name}").unwrap()
299+ pub struct {struct_name}<'a> {{
300+ inner: &'a {mut_prefix}{inner_ty},
318301 }}
302+
303+ impl {struct_name}<'_> {{
319304 "# ,
320- map_name = map_name,
321- raw_map_name = get_raw_map_name( map) ?,
322- return_ty = return_ty,
323- mut_prefix = mut_prefix,
324- map_fn = map_fn
325305 ) ?;
326- }
327306
328- writeln ! ( skel, "}}" ) ?;
307+ for map in MapIter :: new ( object. as_mut_ptr ( ) ) {
308+ let map_name = match get_map_name ( map) ? {
309+ Some ( n) => n,
310+ None => continue ,
311+ } ;
312+
313+ write ! (
314+ skel,
315+ r#"
316+ pub fn {map_name}(&{mut_prefix}self) -> &{mut_prefix}{return_ty} {{
317+ self.inner.{map_fn}("{raw_map_name}").unwrap()
318+ }}
319+ "# ,
320+ map_name = map_name,
321+ raw_map_name = get_raw_map_name( map) ?,
322+ return_ty = return_ty,
323+ mut_prefix = mut_prefix,
324+ map_fn = map_fn
325+ ) ?;
326+ }
329327
328+ writeln ! ( skel, "}}" ) ?;
329+
330+ Ok ( ( ) )
331+ } ;
332+
333+ let ( ) = gen ( true ) ?;
334+ let ( ) = gen ( false ) ?;
330335 Ok ( ( ) )
331336}
332337
@@ -745,8 +750,7 @@ fn gen_skel_contents(_debug: bool, raw_obj_name: &str, obj_file_path: &Path) ->
745750 name = obj_name
746751 ) ?;
747752
748- gen_skel_map_defs ( & mut skel, & mut object, & obj_name, true , false ) ?;
749- gen_skel_map_defs ( & mut skel, & mut object, & obj_name, true , true ) ?;
753+ gen_skel_map_defs ( & mut skel, & mut object, & obj_name, true ) ?;
750754 gen_skel_prog_defs ( & mut skel, & mut object, & obj_name, true , false ) ?;
751755 gen_skel_prog_defs ( & mut skel, & mut object, & obj_name, true , true ) ?;
752756 gen_skel_datasec_defs ( & mut skel, raw_obj_name, & mmap) ?;
@@ -799,8 +803,7 @@ fn gen_skel_contents(_debug: bool, raw_obj_name: &str, obj_file_path: &Path) ->
799803 gen_skel_datasec_getters ( & mut skel, & mut object, raw_obj_name, false ) ?;
800804 writeln ! ( skel, "}}" ) ?;
801805
802- gen_skel_map_defs ( & mut skel, & mut object, & obj_name, false , false ) ?;
803- gen_skel_map_defs ( & mut skel, & mut object, & obj_name, false , true ) ?;
806+ gen_skel_map_defs ( & mut skel, & mut object, & obj_name, false ) ?;
804807 gen_skel_prog_defs ( & mut skel, & mut object, & obj_name, false , false ) ?;
805808 gen_skel_prog_defs ( & mut skel, & mut object, & obj_name, false , true ) ?;
806809 gen_skel_link_defs ( & mut skel, & mut object, & obj_name) ?;
0 commit comments