#include "config.h" #include #include #include #include "serialize.hpp" namespace openpower { namespace software { namespace updater { namespace fs = std::experimental::filesystem; void storeToFile(std::string versionId, uint8_t priority) { if (!fs::is_directory(PERSIST_DIR)) { fs::create_directories(PERSIST_DIR); } // store one copy in /var/lib/obmc/openpower-pnor-code-mgmt/[versionId] auto varPath = PERSIST_DIR + versionId; std::ofstream varOutput(varPath.c_str()); cereal::JSONOutputArchive varArchive(varOutput); varArchive(cereal::make_nvp("priority", priority)); if (fs::is_directory(PNOR_RW_PREFIX + versionId)) { // store another copy in /media/pnor-rw-[versionId]/[versionId] auto rwPath = PNOR_RW_PREFIX + versionId + "/" + versionId; std::ofstream rwOutput(rwPath.c_str()); cereal::JSONOutputArchive rwArchive(rwOutput); rwArchive(cereal::make_nvp("priority", priority)); } } bool restoreFromFile(std::string versionId, uint8_t& priority) { auto varPath = PERSIST_DIR + versionId; if (fs::exists(varPath)) { std::ifstream varInput(varPath.c_str(), std::ios::in); try { cereal::JSONInputArchive varArchive(varInput); varArchive(cereal::make_nvp("priority", priority)); return true; } catch (cereal::RapidJSONException& e) { fs::remove(varPath); } } auto rwPath = PNOR_RW_PREFIX + versionId + "/" + versionId; if (fs::exists(rwPath)) { std::ifstream rwInput(rwPath.c_str(), std::ios::in); try { cereal::JSONInputArchive rwArchive(rwInput); rwArchive(cereal::make_nvp("priority", priority)); return true; } catch (cereal::RapidJSONException& e) { fs::remove(rwPath); } } return false; } void removeFile(std::string versionId) { std::string path = PERSIST_DIR + versionId; if (fs::exists(path)) { fs::remove(path); } } } // namespace updater } // namespace software } // namespace openpower