Skip to content
API Documentation
BastionGuard™
anonymous_namespace{filesystem_recovery.cpp} Namespace Reference

Classes

class  Fat32Recovery
class  ExfatRecovery

Functions

uint16_t le16 (const unsigned char *p)
uint32_t le32 (const unsigned char *p)
uint64_t le64 (const unsigned char *p)
std::string sanitize_path_component (const std::string &in)
bool write_data_to_file (DiskReader &reader, const std::vector< std::pair< uint64_t, uint64_t > > &ranges, const fs::path &out_path, uint64_t expected_size, std::string &error)

Function Documentation

◆ le16()

uint16_t anonymous_namespace{filesystem_recovery.cpp}::le16 ( const unsigned char * p)

◆ le32()

◆ le64()

uint64_t anonymous_namespace{filesystem_recovery.cpp}::le64 ( const unsigned char * p)

Definition at line 38 of file filesystem_recovery.cpp.

38 {
39 return static_cast<uint64_t>(p[0]) |
40 (static_cast<uint64_t>(p[1]) << 8) |
41 (static_cast<uint64_t>(p[2]) << 16) |
42 (static_cast<uint64_t>(p[3]) << 24) |
43 (static_cast<uint64_t>(p[4]) << 32) |
44 (static_cast<uint64_t>(p[5]) << 40) |
45 (static_cast<uint64_t>(p[6]) << 48) |
46 (static_cast<uint64_t>(p[7]) << 56);
47}

References le64().

Referenced by le64(), anonymous_namespace{filesystem_recovery.cpp}::ExfatRecovery::load_allocation_bitmap(), anonymous_namespace{filesystem_recovery.cpp}::ExfatRecovery::load_vbr(), and anonymous_namespace{filesystem_recovery.cpp}::ExfatRecovery::recover_directory().

◆ sanitize_path_component()

◆ write_data_to_file()

bool anonymous_namespace{filesystem_recovery.cpp}::write_data_to_file ( DiskReader & reader,
const std::vector< std::pair< uint64_t, uint64_t > > & ranges,
const fs::path & out_path,
uint64_t expected_size,
std::string & error )

Definition at line 56 of file filesystem_recovery.cpp.

60 {
61 std::ofstream out(out_path, std::ios::binary);
62 if (!out) {
63 error = trs("Unable to create output file") + std::string(": ") + out_path.string();
64 return false;
65 }
66
67 std::vector<unsigned char> buffer(1024 * 1024);
68 uint64_t written = 0;
69 for (const auto& [offset, length] : ranges) {
70 uint64_t remaining = length;
71 uint64_t cursor = offset;
72 while (remaining > 0 && written < expected_size) {
73 const uint64_t allowed = std::min<uint64_t>(remaining, expected_size - written);
74 const size_t chunk = static_cast<size_t>(std::min<uint64_t>(buffer.size(), allowed));
75 if (!reader.read_at(cursor, buffer.data(), chunk)) {
76 error = trs("Read error while exporting recovered file");
77 return false;
78 }
79 out.write(reinterpret_cast<const char*>(buffer.data()), static_cast<std::streamsize>(chunk));
80 if (!out) {
81 error = trs("Write error while exporting recovered file");
82 return false;
83 }
84 remaining -= chunk;
85 cursor += chunk;
86 written += chunk;
87 }
88 if (written >= expected_size) break;
89 }
90 return true;
91}
bool read_at(uint64_t offset, void *buffer, size_t len)
std::string trs(const char *msgid)
Definition i18n.cpp:22

References DiskReader::read_at(), trs(), and write_data_to_file().

Referenced by anonymous_namespace{filesystem_recovery.cpp}::Fat32Recovery::export_file(), anonymous_namespace{filesystem_recovery.cpp}::ExfatRecovery::export_stream(), anonymous_namespace{filesystem_recovery.cpp}::ExfatRecovery::export_stream_deleted(), anonymous_namespace{filesystem_recovery.cpp}::ExfatRecovery::load_allocation_bitmap(), and write_data_to_file().