23#ifndef CORSIX_TH_ISO_FS_H_
24#define CORSIX_TH_ISO_FS_H_
56 explicit iso_filesystem(
const char* path,
char pathSeparator =
'/');
83 void (*fnCallback)(
void*,
const char*,
85 void* pCallbackData)
const;
111 struct file_metadata {
117 std::unique_ptr<std::FILE, int (*)(std::FILE*)> raw_file;
119 std::vector<file_metadata> files;
124 void set_error(
const char* sFormat, ...);
127 bool seek_to_sector(uint32_t iSector);
130 bool read_data(uint32_t iByteCount, uint8_t* pBuffer);
142 int find_hosp_directory(
const uint8_t* pDirEnt,
const uint32_t dirEntsSize,
152 void build_file_lookup_table(uint32_t iSector, uint32_t dirEntsSize,
153 std::string_view prefix);
156 static bool file_metadata_less(
const file_metadata& lhs,
157 const file_metadata& rhs);
Layer for reading Theme Hospital files out of an .iso disk image.
Definition iso_fs.h:43
~iso_filesystem()=default
static constexpr size_t min_sector_size
Definition iso_fs.h:47
int file_handle
Definition iso_fs.h:65
bool get_file_data(file_handle iFile, uint8_t *pBuffer)
Get the contents of a file in the loaded .iso disk image.
Definition iso_fs.cpp:552
static bool is_handle_good(file_handle x)
Test if a file handle from find_file() is good or is invalid.
Definition iso_fs.h:88
uint32_t get_file_size(file_handle iFile) const
Get the size (in bytes) of a file in the loaded .iso disk image.
Definition iso_fs.cpp:545
void visit_directory_files(const char *sPath, void(*fnCallback)(void *, const char *, const char *), void *pCallbackData) const
Iterate all files of the .iso disk image within a given directory.
Definition iso_fs.cpp:494
file_handle find_file(const char *sPath) const
Find a file in the loaded .iso disk image.
Definition iso_fs.cpp:518
uint32_t get_file_start(file_handle iFile) const
Get the byte offset of the start of the file in the loaded .iso.
Definition iso_fs.cpp:538
std::string_view get_error() const
Get the reason for the most recent failure.
Definition iso_fs.cpp:562