mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 21:27:52 -04:00
c18502d5f5
* deps: add `xxhash` library * extractor: hash ISO files as they are extracted * extractor: report on game data validation errors * lint: formatting * extractor: automatically pick the right decompiler config
38 lines
869 B
C++
38 lines
869 B
C++
#pragma once
|
|
|
|
#include <string>
|
|
#include <vector>
|
|
#include <filesystem>
|
|
#include "third-party/xxhash.hpp"
|
|
|
|
struct IsoFile {
|
|
struct Entry {
|
|
bool is_dir = false;
|
|
std::string name;
|
|
|
|
// if file
|
|
size_t offset_in_file = 0;
|
|
size_t size = 0;
|
|
|
|
// if dir
|
|
std::vector<Entry> children;
|
|
void print(std::string* result, const std::string& prefix) const;
|
|
};
|
|
|
|
std::string print() const;
|
|
|
|
Entry root;
|
|
|
|
int files_extracted = 0;
|
|
bool shouldHash = false;
|
|
// There is no reason to map to the files, as we don't retain mappings of each file's expected
|
|
// hash
|
|
std::vector<xxh::hash64_t> hashes = {};
|
|
|
|
IsoFile();
|
|
};
|
|
|
|
IsoFile find_files_in_iso(FILE* fp);
|
|
void unpack_iso_files(FILE* fp, IsoFile& layout, const std::filesystem::path& dest);
|
|
IsoFile unpack_iso_files(FILE* fp, const std::filesystem::path& dest, const bool hashFiles = false);
|