Skip to content

Commit

Permalink
fdtgrep: Move property checking into a function
Browse files Browse the repository at this point in the history
The h_include() function includes a piece which checks if a node
contains a property being searched for. Move this into its own
function to reduce the size of the h_include() function.

Signed-off-by: Simon Glass <[email protected]>
  • Loading branch information
sjg20 committed Dec 31, 2023
1 parent 490afe7 commit 61a695e
Showing 1 changed file with 35 additions and 13 deletions.
48 changes: 35 additions & 13 deletions tools/fdtgrep.c
Original file line number Diff line number Diff line change
Expand Up @@ -575,6 +575,40 @@ static int check_type_include(void *priv, int type, const char *data, int size)
return 0;
}

/**
* check_props() - Check if a node has properties that we want to include
*
* Calls check_type_include() for each property in the nodn, returning 1 if
* that function returns 1 for any of them
*
* @disp: Display structure, holding info about our options
* @fdt: Devicetree blob to check
* @node: Node offset to check
* @inc: Current value of the 'include' variable (see h_include())
* Return: 0 to exclude, 1 to include, -1 if no information is available
*/
static int check_props(struct display_info *disp, const void *fdt, int node,
int inc)
{
int offset;

for (offset = fdt_first_property_offset(fdt, node);
offset > 0 && inc != 1;
offset = fdt_next_property_offset(fdt, offset)) {
const struct fdt_property *prop;
const char *str;

prop = fdt_get_property_by_offset(fdt, offset, NULL);
if (!prop)
continue;
str = fdt_string(fdt, fdt32_to_cpu(prop->nameoff));
inc = check_type_include(disp, FDT_NODE_HAS_PROP, str,
strlen(str));
}

return inc;
}

/**
* h_include() - Include handler function for fdt_first_region()
*
Expand Down Expand Up @@ -617,19 +651,7 @@ static int h_include(void *priv, const void *fdt, int offset, int type,
(disp->types_inc & FDT_NODE_HAS_PROP)) {
debug(" - checking node '%s'\n",
fdt_get_name(fdt, offset, NULL));
for (offset = fdt_first_property_offset(fdt, offset);
offset > 0 && inc != 1;
offset = fdt_next_property_offset(fdt, offset)) {
const struct fdt_property *prop;
const char *str;

prop = fdt_get_property_by_offset(fdt, offset, NULL);
if (!prop)
continue;
str = fdt_string(fdt, fdt32_to_cpu(prop->nameoff));
inc = check_type_include(priv, FDT_NODE_HAS_PROP, str,
strlen(str));
}
inc = check_props(disp, fdt, offset, inc);
if (inc == -1)
inc = 0;
}
Expand Down

0 comments on commit 61a695e

Please sign in to comment.