Add getXmlFilePath for manifest / matrix.
Return <path> or if it doesn't exist,
/{system,vendor}/etc/<name>_V<major>_<minor>.<format>
Test: libvintf_test
Test: vintf_object_test
Bug: 38359330
Change-Id: I80eff960a5dea91521e99e628e1af7cf52dad195
diff --git a/CompatibilityMatrix.cpp b/CompatibilityMatrix.cpp
index 907ac8c..509ca1d 100644
--- a/CompatibilityMatrix.cpp
+++ b/CompatibilityMatrix.cpp
@@ -16,6 +16,7 @@
#include "CompatibilityMatrix.h"
+#include "parse_string.h"
#include "utils.h"
namespace android {
@@ -57,6 +58,25 @@
return details::fetchAllInformation(path, gCompatibilityMatrixConverter, this);
}
+std::string CompatibilityMatrix::getXmlSchemaPath(const std::string& xmlFileName,
+ const Version& version) const {
+ using std::literals::string_literals::operator""s;
+ auto range = getXmlFiles(xmlFileName);
+ for (auto it = range.first; it != range.second; ++it) {
+ const MatrixXmlFile& matrixXmlFile = it->second;
+ if (matrixXmlFile.versionRange().contains(version)) {
+ if (!matrixXmlFile.overriddenPath().empty()) {
+ return matrixXmlFile.overriddenPath();
+ }
+ return "/"s + (type() == SchemaType::DEVICE ? "vendor" : "system") + "/etc/" +
+ xmlFileName + "_V" + std::to_string(matrixXmlFile.versionRange().majorVer) +
+ "_" + std::to_string(matrixXmlFile.versionRange().maxMinor) + "." +
+ to_string(matrixXmlFile.format());
+ }
+ }
+ return "";
+}
+
bool operator==(const CompatibilityMatrix &lft, const CompatibilityMatrix &rgt) {
return lft.mType == rgt.mType && lft.mHals == rgt.mHals && lft.mXmlFiles == rgt.mXmlFiles &&
(lft.mType != SchemaType::DEVICE || (lft.device.mVndk == rgt.device.mVndk)) &&