// (C) 2018-2024 by Folkert van Heusden // Released under MIT license #include #include "disk_backend.h" #include "gen.h" #if IS_POSIX #include "disk_backend_file.h" #include "disk_backend_nbd.h" #endif disk_backend::disk_backend() { } disk_backend::~disk_backend() { } #if IS_POSIX void disk_backend::store_object_in_overlay(const off_t id, const std::vector & data) { overlay.insert_or_assign(id, data); } std::optional > disk_backend::get_object_from_overlay(const off_t id) { auto it = overlay.find(id); if (it != overlay.end()) return it->second; return { }; } std::optional > disk_backend::get_from_overlay(const off_t offset, const size_t sector_size) { assert((offset % sector_size) == 0); if (use_overlay) return get_object_from_overlay(offset / sector_size); return { }; } bool disk_backend::store_mem_range_in_overlay(const off_t offset, const size_t n, const uint8_t *const from, const size_t sector_size) { assert((offset % sector_size) == 0); assert((n % sector_size) == 0); if (use_overlay) { for(size_t o=0; o(from + o, from + o + sector_size)); return true; } return false; } json_t *disk_backend::serialize_overlay() const { json_t *out = json_object(); for(auto & id: overlay) { json_t *j_data = json_array(); for(size_t i=0; i data; for(size_t i=0; ideserialize_overlay(j); // assume we want snapshots (again?) d->begin(true); return d; } #endif