citra-emu
/
citra
Archived
1
0
Fork 0

core/file_sys: Make RomFSReader an abstract interface

The original RomFSReader is renamed to DirectRomFSReader that directly reads the RomFS.
This commit is contained in:
zhupengfei 2020-02-07 12:45:54 +08:00
parent 821a35bd2b
commit 83e0cc45f4
No known key found for this signature in database
GPG Key ID: DD129E108BD09378
2 changed files with 19 additions and 7 deletions

View File

@ -5,7 +5,7 @@
namespace FileSys {
std::size_t RomFSReader::ReadFile(std::size_t offset, std::size_t length, u8* buffer) {
std::size_t DirectRomFSReader::ReadFile(std::size_t offset, std::size_t length, u8* buffer) {
if (length == 0)
return 0; // Crypto++ does not like zero size buffer
file.Seek(file_offset + offset, SEEK_SET);

View File

@ -6,23 +6,35 @@
namespace FileSys {
/**
* Interface for reading RomFS data.
*/
class RomFSReader {
public:
RomFSReader(FileUtil::IOFile&& file, std::size_t file_offset, std::size_t data_size)
virtual std::size_t GetSize() const = 0;
virtual std::size_t ReadFile(std::size_t offset, std::size_t length, u8* buffer) = 0;
};
/**
* A RomFS reader that directly reads the RomFS file.
*/
class DirectRomFSReader : public RomFSReader {
public:
DirectRomFSReader(FileUtil::IOFile&& file, std::size_t file_offset, std::size_t data_size)
: is_encrypted(false), file(std::move(file)), file_offset(file_offset),
data_size(data_size) {}
RomFSReader(FileUtil::IOFile&& file, std::size_t file_offset, std::size_t data_size,
DirectRomFSReader(FileUtil::IOFile&& file, std::size_t file_offset, std::size_t data_size,
const std::array<u8, 16>& key, const std::array<u8, 16>& ctr,
std::size_t crypto_offset)
: is_encrypted(true), file(std::move(file)), key(key), ctr(ctr), file_offset(file_offset),
crypto_offset(crypto_offset), data_size(data_size) {}
std::size_t GetSize() const {
std::size_t GetSize() const override {
return data_size;
}
std::size_t ReadFile(std::size_t offset, std::size_t length, u8* buffer);
std::size_t ReadFile(std::size_t offset, std::size_t length, u8* buffer) override;
private:
bool is_encrypted;