summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHridya Valsaraju <hridya@google.com>2018-02-03 01:47:43 +0000
committerandroid-build-merger <android-build-merger@google.com>2018-02-03 01:47:43 +0000
commit4bfa6ad9853428b21520b3422c9462974e770259 (patch)
tree1fcbde564de85a8f388086789accae958c893dc9
parent6788c8cc94c6458a85a3c008e3ff24c21b6cc98f (diff)
parent2bc3e216c0eac1a1116d7d2378cccef929e30cb0 (diff)
downloadlibufdt-4bfa6ad9853428b21520b3422c9462974e770259.tar.gz
Refactor code to find overlay target am: c0957f2fa7
am: 2bc3e216c0 Change-Id: If485f06b1ddf23cef2688618dc7a5e63fdb37d41
-rw-r--r--include/ufdt_overlay_internal.h12
-rw-r--r--tests/libufdt_verify/ufdt_test_overlay.cpp38
-rw-r--r--ufdt_overlay.c53
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");