| #include <iostream> |
| #include <string> |
| #include <sstream> |
| #include <fstream> |
| #include <stdexcept> |
| #include "bmc_version.hpp" |
| |
| namespace phosphor |
| { |
| namespace software |
| { |
| namespace manager |
| { |
| |
| const std::string BMCVersion::getVersion() const |
| { |
| // Get version from /etc/os-release. |
| std::string versionKey = "VERSION_ID="; |
| std::string version{}; |
| std::ifstream efile; |
| std::string line; |
| efile.open("/etc/os-release"); |
| |
| while (getline(efile, line)) |
| { |
| if (line.substr(0, versionKey.size()).find(versionKey) |
| != std::string::npos) |
| { |
| // This line looks like VERSION_ID="v1.99.0-353-ga3b8a0a-dirty". |
| // So grab everything in quotes. |
| std::size_t pos = line.find_first_of('"') + 1; |
| version = line.substr(pos, line.find_last_of('"') - pos); |
| break; |
| } |
| } |
| efile.close(); |
| return version; |
| } |
| |
| const std::string BMCVersion::getId() const |
| { |
| auto version = getVersion(); |
| std::stringstream hexId; |
| |
| if (version.empty()) |
| { |
| throw std::runtime_error("Software version is empty"); |
| } |
| |
| // Only want 8 hex digits. |
| hexId << std::hex << ((std::hash<std::string> {}(version)) & 0xFFFFFFFF); |
| return hexId.str(); |
| } |
| |
| } // namespace manager |
| } // namespace software |
| } // namepsace phosphor |