Migrate to libfdt

Replace our custom FDT parser implementation with libfdt while retaining
the original API as a thin wrapper around libfdt. This minimizes the
changes to the rest of our code base and hides differences in coding
styles.

As a byproduct, this fixes an issue with unaligned memory accesses while
parsing as libfdt handles these correctly.

Bug: 150587116
Change-Id: I8d305d7094b1be04608048009d73d7c448a578a0
diff --git a/src/string_test.cc b/src/string_test.cc
index f814636..222f5d8 100644
--- a/src/string_test.cc
+++ b/src/string_test.cc
@@ -25,13 +25,15 @@
 TEST(string, valid)
 {
 	struct string str;
+	struct memiter it;
 	constexpr const char data[] = "test";
 
 	string_init_empty(&str);
 	ASSERT_TRUE(string_is_empty(&str));
 	ASSERT_STREQ(string_data(&str), "");
 
-	ASSERT_EQ(string_init(&str, data, sizeof(data)), STRING_SUCCESS);
+	memiter_init(&it, data, sizeof(data));
+	ASSERT_EQ(string_init(&str, &it), STRING_SUCCESS);
 	ASSERT_FALSE(string_is_empty(&str));
 	ASSERT_STRNE(string_data(&str), "");
 	ASSERT_STREQ(string_data(&str), "test");
@@ -40,27 +42,31 @@
 TEST(string, data_zero_size)
 {
 	struct string str;
+	struct memiter it;
 	constexpr const char data[] = "test";
 
-	ASSERT_EQ(string_init(&str, data, 0), STRING_ERROR_INVALID_INPUT);
+	memiter_init(&it, data, 0);
+	ASSERT_EQ(string_init(&str, &it), STRING_ERROR_INVALID_INPUT);
 }
 
 TEST(string, data_no_null_terminator)
 {
 	struct string str;
+	struct memiter it;
 	constexpr const char data[] = {'t', 'e', 's', 't'};
 
-	ASSERT_EQ(string_init(&str, data, sizeof(data)),
-		  STRING_ERROR_INVALID_INPUT);
+	memiter_init(&it, data, sizeof(data));
+	ASSERT_EQ(string_init(&str, &it), STRING_ERROR_INVALID_INPUT);
 }
 
 TEST(string, data_two_null_terminators)
 {
 	struct string str;
+	struct memiter it;
 	constexpr const char data[] = {'\0', 't', 'e', 's', 't', '\0'};
 
-	ASSERT_EQ(string_init(&str, data, sizeof(data)),
-		  STRING_ERROR_INVALID_INPUT);
+	memiter_init(&it, data, sizeof(data));
+	ASSERT_EQ(string_init(&str, &it), STRING_ERROR_INVALID_INPUT);
 }
 
 } /* namespace */