39 uint64_t constexpr sbc_magic_value = 0xDEADF00D1337FADE;
41 auto constexpr max_sbc_content_size = uint32_t{2} * 1024 * 1024 * 1024;
52 file_handle() =
delete;
54 explicit file_handle(FILE *f) : m_f{f}
58 file_handle(file_handle
const &) =
delete;
59 file_handle(file_handle &&) noexcept = delete;
60 file_handle &operator=(file_handle const &) = delete;
61 file_handle &operator=(file_handle &&) noexcept = delete;
76 auto fh = file_handle{[&file_name]() {
77 auto *f = fopen(file_name.c_str(),
"rb");
85 if (fread(&magic, 1,
sizeof(magic), fh) !=
sizeof(magic)) {
89 magic = be64toh(magic);
91 return magic == sbc_magic_value;
96 auto fh = file_handle{[&file_name]() {
97 auto *f = fopen(file_name.c_str(),
"rb");
106 if (fread(&magic, 1,
sizeof(magic), fh) !=
sizeof(magic)) {
110 magic = be64toh(magic);
111 if (magic != sbc_magic_value) {
115 if (fread(&sbc.block_size, 1,
sizeof(sbc.block_size), fh) !=
sizeof(sbc.block_size)) {
119 if (fread(&sbc.block_count, 1,
sizeof(sbc.block_count), fh) !=
sizeof(sbc.block_count)) {
123 sbc.block_size = be32toh(sbc.block_size);
124 sbc.block_count = be32toh(sbc.block_count);
126 auto const content_size =
size_t{sbc.block_size} * sbc.block_count;
127 if (content_size > max_sbc_content_size) {
129 "Failed to read content from sbc file. Exceeded limit: " +
133 sbc.content.resize(content_size);
134 if (fread(sbc.content.data(), 1, sbc.content.size(), fh) != sbc.content.size()) {
143 auto fh = file_handle{[&file_name]() {
144 auto *f = fopen(file_name.c_str(),
"wb");
152 if (sbc_size > max_sbc_content_size) {
154 "Failed to write content to sbc file. Exceeded limit: " +
161 uint64_t
const magic =
htobe64(sbc_magic_value);
162 if (fwrite(&magic, 1,
sizeof(magic), fh) !=
sizeof(magic)) {
166 if (fwrite(&block_size, 1,
sizeof(block_size), fh) !=
sizeof(block_size)) {
170 if (fwrite(&block_count, 1,
sizeof(block_count), fh) !=
sizeof(block_count)) {
@ DOCA_ERROR_INVALID_VALUE
std::string to_string(storage::control::message_type type)
void write_binary_content_to_file(std::string const &file_name, storage::binary_content const &sbc)
bool file_has_binary_content_header(std::string const &file_name)
storage::binary_content load_binary_content_from_file(std::string const &file_name)
std::vector< uint8_t > content