1 #pragma once 2 3 #include "image_handler.hpp" 4 5 #include <cstdint> 6 #include <fstream> 7 #include <memory> 8 #include <string> 9 #include <vector> 10 11 namespace ipmi_flash 12 { 13 14 class FileHandler : public ImageHandlerInterface 15 { 16 public: 17 /** 18 * Create a FileHandler. This object is basically a filewriter. 19 * 20 * @param[in] filename - file to use for the contents, fully 21 * qualified file system path. 22 */ 23 explicit FileHandler(const std::string& filename) : filename(filename) 24 {} 25 26 bool open(const std::string& path, 27 std::ios_base::openmode mode = std::ios::out) override; 28 void close() override; 29 bool write(std::uint32_t offset, 30 const std::vector<std::uint8_t>& data) override; 31 virtual std::optional<std::vector<uint8_t>> 32 read(std::uint32_t offset, std::uint32_t size) override; 33 int getSize() override; 34 35 private: 36 /** the active hash path, ignore. */ 37 std::string path; 38 39 /** The file handle. */ 40 std::fstream file; 41 42 /** The filename (including path) to use to write bytes. */ 43 std::string filename; 44 }; 45 46 } // namespace ipmi_flash 47