diff options
author | Hridya Valsaraju <hridya@google.com> | 2018-02-03 01:21:36 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2018-02-03 01:21:36 +0000 |
commit | 2bc3e216c0eac1a1116d7d2378cccef929e30cb0 (patch) | |
tree | 1fcbde564de85a8f388086789accae958c893dc9 | |
parent | 51c5d7da4024da10103b4228c57ac8626ff80485 (diff) | |
parent | c0957f2fa7c1b47b61044b3af3d7d82ca44e0680 (diff) | |
download | libufdt-2bc3e216c0eac1a1116d7d2378cccef929e30cb0.tar.gz |
Refactor code to find overlay target
am: c0957f2fa7
Change-Id: Iddb06e770f08e7138192bc898c973b39e833f6f6
-rw-r--r-- | include/ufdt_overlay_internal.h | 12 | ||||
-rw-r--r-- | tests/libufdt_verify/ufdt_test_overlay.cpp | 38 | ||||
-rw-r--r-- | ufdt_overlay.c | 53 |
3 files changed, 42 insertions, 61 deletions
diff --git a/include/ufdt_overlay_internal.h b/include/ufdt_overlay_internal.h index f2b526e..e370714 100644 --- a/include/ufdt_overlay_internal.h +++ b/include/ufdt_overlay_internal.h @@ -24,4 +24,16 @@ int ufdt_do_one_fixup(struct ufdt *tree, const char *fixups, int fixups_len, int phandle); int ufdt_overlay_do_fixups(struct ufdt *main_tree, struct ufdt *overlay_tree); +enum overlay_result { + OVERLAY_RESULT_OK, + OVERLAY_RESULT_MISSING_TARGET, + OVERLAY_RESULT_MISSING_OVERLAY, + OVERLAY_RESULT_TARGET_PATH_INVALID, + OVERLAY_RESULT_TARGET_INVALID, + OVERLAY_RESULT_MERGE_FAIL, + OVERLAY_RESULT_VERIFY_FAIL, +}; +enum overlay_result ufdt_overlay_get_target(struct ufdt *tree, + struct ufdt_node *frag_node, + struct ufdt_node **target_node); #endif /* UFDT_OVERLAY_INTERNAL_H */ diff --git a/tests/libufdt_verify/ufdt_test_overlay.cpp b/tests/libufdt_verify/ufdt_test_overlay.cpp index 3043dcf..9b076c0 100644 --- a/tests/libufdt_verify/ufdt_test_overlay.cpp +++ b/tests/libufdt_verify/ufdt_test_overlay.cpp @@ -249,50 +249,18 @@ static bool ufdt_verify_overlay_node(struct ufdt_node *target_node, return ufdt_node_compare(target_node, overlay_node, target_tree, overlay_tree); } -enum overlay_result { - OVERLAY_RESULT_OK, - OVERLAY_RESULT_MISSING_TARGET, - OVERLAY_RESULT_MISSING_OVERLAY, - OVERLAY_RESULT_TARGET_PATH_INVALID, - OVERLAY_RESULT_TARGET_INVALID, - OVERLAY_RESULT_VERIFY_FAIL, -}; - /* * verify one overlay fragment (subtree). */ static int ufdt_verify_fragment(struct ufdt *tree, struct ufdt *overlay_tree, struct ufdt_node *frag_node) { - uint32_t target; - const char *target_path; - const void *val; struct ufdt_node *target_node = NULL; struct ufdt_node *overlay_node = NULL; - - val = ufdt_node_get_fdt_prop_data_by_name(frag_node, "target", NULL); - if (val) { - dto_memcpy(&target, val, sizeof(target)); - target = fdt32_to_cpu(target); - target_node = ufdt_get_node_by_phandle(tree, target); - if (target_node == NULL) { - dto_error("failed to find target %04x\n", target); - return OVERLAY_RESULT_TARGET_INVALID; - } - } - + enum overlay_result target_search_result = ufdt_overlay_get_target(tree, frag_node, + &target_node); if (target_node == NULL) { - target_path = - ufdt_node_get_fdt_prop_data_by_name(frag_node, "target-path", NULL); - if (target_path == NULL) { - return OVERLAY_RESULT_MISSING_TARGET; - } - - target_node = ufdt_get_node_by_path(tree, target_path); - if (target_node == NULL) { - dto_error("failed to find target-path %s\n", target_path); - return OVERLAY_RESULT_TARGET_PATH_INVALID; - } + return target_search_result; } overlay_node = ufdt_node_get_node_by_path(frag_node, "__overlay__"); diff --git a/ufdt_overlay.c b/ufdt_overlay.c index 10c6acb..bdc7bd6 100644 --- a/ufdt_overlay.c +++ b/ufdt_overlay.c @@ -318,56 +318,57 @@ static int ufdt_overlay_node(struct ufdt_node *target_node, return ufdt_node_merge_into(target_node, overlay_node, pool); } -/* - * Return value of ufdt_apply_fragment(). - */ - -enum overlay_result { - OVERLAY_RESULT_OK, - OVERLAY_RESULT_MISSING_TARGET, - OVERLAY_RESULT_MISSING_OVERLAY, - OVERLAY_RESULT_TARGET_PATH_INVALID, - OVERLAY_RESULT_TARGET_INVALID, - OVERLAY_RESULT_MERGE_FAIL, -}; - -/* - * Apply one overlay fragment (subtree). - */ -static enum overlay_result ufdt_apply_fragment(struct ufdt *tree, - struct ufdt_node *frag_node, - struct ufdt_node_pool *pool) { +enum overlay_result ufdt_overlay_get_target(struct ufdt *tree, + struct ufdt_node *frag_node, + struct ufdt_node **target_node) { uint32_t target; const char *target_path; const void *val; - struct ufdt_node *target_node = NULL; - struct ufdt_node *overlay_node = NULL; + *target_node = NULL; val = ufdt_node_get_fdt_prop_data_by_name(frag_node, "target", NULL); if (val) { dto_memcpy(&target, val, sizeof(target)); target = fdt32_to_cpu(target); - target_node = ufdt_get_node_by_phandle(tree, target); - if (target_node == NULL) { + *target_node = ufdt_get_node_by_phandle(tree, target); + if (*target_node == NULL) { dto_error("failed to find target %04x\n", target); return OVERLAY_RESULT_TARGET_INVALID; } } - if (target_node == NULL) { + if (*target_node == NULL) { target_path = ufdt_node_get_fdt_prop_data_by_name(frag_node, "target-path", NULL); if (target_path == NULL) { return OVERLAY_RESULT_MISSING_TARGET; } - target_node = ufdt_get_node_by_path(tree, target_path); - if (target_node == NULL) { + *target_node = ufdt_get_node_by_path(tree, target_path); + if (*target_node == NULL) { dto_error("failed to find target-path %s\n", target_path); return OVERLAY_RESULT_TARGET_PATH_INVALID; } } + return OVERLAY_RESULT_OK; +} + +/* + * Apply one overlay fragment (subtree). + */ +static enum overlay_result ufdt_apply_fragment(struct ufdt *tree, + struct ufdt_node *frag_node, + struct ufdt_node_pool *pool) { + struct ufdt_node *target_node = NULL; + struct ufdt_node *overlay_node = NULL; + + enum overlay_result result = + ufdt_overlay_get_target(tree, frag_node, &target_node); + if (target_node == NULL) { + return result; + } + overlay_node = ufdt_node_get_node_by_path(frag_node, "__overlay__"); if (overlay_node == NULL) { dto_error("missing __overlay__ sub-node\n"); |