halcc: Fix manifest scheme to have multiple <manifest> element 07/310507/1
authorYoungjae Cho <y0.cho@samsung.com>
Tue, 30 Apr 2024 01:56:21 +0000 (10:56 +0900)
committerYoungjae Cho <y0.cho@samsung.com>
Tue, 30 Apr 2024 05:29:54 +0000 (14:29 +0900)
To have multiple <manifest> element, halcc parser now recognizes root
element <root> and searches for its children <manifest>.

Change-Id: I72ca77a6331f172c6a0f6e4eb3c660dccef7e71c
Signed-off-by: Youngjae Cho <y0.cho@samsung.com>
src/hal-api-compatibility-checker-parser.c
tests/unittest/test-hal-compatibility-checker.cc

index 3eceef21ac4ecf3756c497ab957df95cdf49d293..f2e1f2c7eae8b75807a6f9c2728ce2efb9ad9c02 100644 (file)
@@ -271,10 +271,17 @@ static int parse_xml_doc(xmlDoc *doc, halcc_manifest *manifest)
                return -EINVAL;
        }
 
-       ret = parse_manifest(root, manifest);
-       if (ret != 0) {
-               printf("Failed to parse_manifest(), ret=%d\n", ret);
-               return ret;
+       if (!xmlStrEqual(root->name, "root")) {
+               printf("Invalid root node, %s\n", root->name);
+               return -EINVAL;
+       }
+
+       for (xmlNode *child = root->children; child; child = child->next) {
+               ret = parse_manifest(child, manifest);
+               if (ret != 0) {
+                       printf("Failed to parse_manifest(), ret=%d\n", ret);
+                       continue;
+               }
        }
 
        return 0;
index 1ffee7bb2b124ec377cb9f3c3f94fd53a2386d0f..5198e27d8350467c36518d1da07f93f90eadca20 100644 (file)
 using namespace std;
 
 static char g_manifest_xml[] =
-"<manifest version=\"1.0\" type=\"platform\">"
-"      <hal>"
-"              <name>hal.device.display</name>"
-"              <version>1.5</version>"
-"              <transport>passthrough</transport>"
-"              <interface>"
-"                      <name>hal_backend_device_display_data</name>"
-"              </interface>"
-"              <dependency>"
-"                      <hal>"
-"                              <name>hal.device.board</name>"
-"                              <version>1.0</version>"
-"                              <transport>passthrough</transport>"
-"                              <interface>"
-"                                      <name>hal_backend_device_board_data</name>"
-"                              </interface>"
-"                      </hal>"
-"                      <hal>"
-"                              <name>hal.tdm</name>"
-"                              <version>1.0</version>"
-"                              <transport>passthrough</transport>"
-"                              <interface>"
-"                                      <name>hal_backend_tdm_data</name>"
-"                              </interface>"
-"                      </hal>"
-"              </dependency>"
-"      </hal>"
-"      <hal>"
-"              <name>hal.something</name>"
-"              <version>2.34</version>"
-"              <transport>passthrough</transport>"
-"              <interface>"
-"                      <name>hal_backend_something_data</name>"
-"              </interface>"
-"      </hal>"
-"      <hal>"
-"              <name>hal.test</name>"
-"              <version>4.8</version>"
-"              <transport>passthrough</transport>"
-"              <interface>"
-"                      <name>hal_backend_test_data</name>"
-"              </interface>"
-"      </hal>"
-"</manifest>";
+"<root>"
+"      <manifest version=\"1.0\" type=\"platform\">"
+"              <hal>"
+"                      <name>hal.device.display</name>"
+"                      <version>1.5</version>"
+"                      <transport>passthrough</transport>"
+"                      <interface>"
+"                              <name>hal_backend_device_display_data</name>"
+"                      </interface>"
+"                      <dependency>"
+"                              <hal>"
+"                                      <name>hal.device.board</name>"
+"                                      <version>1.0</version>"
+"                                      <transport>passthrough</transport>"
+"                                      <interface>"
+"                                              <name>hal_backend_device_board_data</name>"
+"                                      </interface>"
+"                              </hal>"
+"                              <hal>"
+"                                      <name>hal.tdm</name>"
+"                                      <version>1.0</version>"
+"                                      <transport>passthrough</transport>"
+"                                      <interface>"
+"                                              <name>hal_backend_tdm_data</name>"
+"                                      </interface>"
+"                              </hal>"
+"                      </dependency>"
+"              </hal>"
+"              <hal>"
+"                      <name>hal.something</name>"
+"                      <version>2.34</version>"
+"                      <transport>passthrough</transport>"
+"                      <interface>"
+"                              <name>hal_backend_something_data</name>"
+"                      </interface>"
+"              </hal>"
+"              <hal>"
+"                      <name>hal.test</name>"
+"                      <version>4.8</version>"
+"                      <transport>passthrough</transport>"
+"                      <interface>"
+"                              <name>hal_backend_test_data</name>"
+"                      </interface>"
+"              </hal>"
+"      </manifest>"
+"</root>";
 
 class HalccObjectTest : public ::testing::Test
 {