#include #include #include #include #include #include #include "version_host_software_manager.hpp" namespace openpower { namespace software { namespace manager { using namespace phosphor::logging; std::string Version::getVersion(const std::string& manifestFilePath) { constexpr auto versionKey = "version="; constexpr auto versionKeySize = strlen(versionKey); if (manifestFilePath.empty()) { log("Error MANIFESTFilePath is empty"); throw std::runtime_error("MANIFESTFilePath is empty"); } std::string version{}; std::ifstream efile; std::string line; efile.exceptions(std::ifstream::failbit | std::ifstream::badbit | std::ifstream::eofbit); // Too many GCC bugs (53984, 66145) to do this the right way... try { efile.open(manifestFilePath); while (getline(efile, line)) { if (line.compare(0, versionKeySize, versionKey) == 0) { version = line.substr(versionKeySize); break; } } efile.close(); } catch (const std::exception& e) { log("Error in reading Host MANIFEST file"); } return version; } std::string Version::getId(const std::string& version) { std::stringstream hexId; if (version.empty()) { log("Error Host version is empty"); throw std::runtime_error("Host version is empty"); } // Only want 8 hex digits. hexId << std::hex << ((std::hash {}( version)) & 0xFFFFFFFF); return hexId.str(); } } // namespace manager } // namespace software } // namepsace openpower