From 3c06e9b8c8e7ecaaa9f0074ea388c7c8dc6277e7 Mon Sep 17 00:00:00 2001 From: condut Date: Fri, 10 Jul 2015 02:33:18 +0300 Subject: [PATCH] Update per PR comments. --- src/core/file_sys/archive_romfs.cpp | 4 ++-- src/core/file_sys/archive_romfs.h | 6 +++--- src/core/file_sys/ivfc_archive.cpp | 10 +++++----- src/core/file_sys/ivfc_archive.h | 20 ++++++++++---------- src/core/loader/loader.h | 2 +- src/core/loader/ncch.cpp | 7 ++++--- src/core/loader/ncch.h | 2 +- 7 files changed, 26 insertions(+), 25 deletions(-) diff --git a/src/core/file_sys/archive_romfs.cpp b/src/core/file_sys/archive_romfs.cpp index 7ec9fa73d..8e8ef5250 100644 --- a/src/core/file_sys/archive_romfs.cpp +++ b/src/core/file_sys/archive_romfs.cpp @@ -18,13 +18,13 @@ namespace FileSys { ArchiveFactory_RomFS::ArchiveFactory_RomFS(const Loader::AppLoader& app_loader) { // Load the RomFS from the app - if (Loader::ResultStatus::Success != app_loader.ReadRomFS(m_romfs_file, m_offset, m_size)) { + if (Loader::ResultStatus::Success != app_loader.ReadRomFS(romfs_file, data_offset, data_size)) { LOG_ERROR(Service_FS, "Unable to read RomFS!"); } } ResultVal> ArchiveFactory_RomFS::Open(const Path& path) { - auto archive = Common::make_unique(m_romfs_file, m_offset, m_size); + auto archive = Common::make_unique(romfs_file, data_offset, data_size); return MakeResult>(std::move(archive)); } diff --git a/src/core/file_sys/archive_romfs.h b/src/core/file_sys/archive_romfs.h index ea6490330..01cef4733 100644 --- a/src/core/file_sys/archive_romfs.h +++ b/src/core/file_sys/archive_romfs.h @@ -27,9 +27,9 @@ public: ResultCode Format(const Path& path) override; private: - std::shared_ptr m_romfs_file; - u64 m_offset; - u64 m_size; + std::shared_ptr romfs_file; + u64 data_offset; + u64 data_size; }; } // namespace FileSys diff --git a/src/core/file_sys/ivfc_archive.cpp b/src/core/file_sys/ivfc_archive.cpp index 131285bc9..c1cba699e 100644 --- a/src/core/file_sys/ivfc_archive.cpp +++ b/src/core/file_sys/ivfc_archive.cpp @@ -21,7 +21,7 @@ std::string IVFCArchive::GetName() const { } std::unique_ptr IVFCArchive::OpenFile(const Path& path, const Mode mode) const { - return Common::make_unique(m_romfs_file, m_offset, m_size); + return Common::make_unique(romfs_file, data_offset, data_size); } bool IVFCArchive::DeleteFile(const Path& path) const { @@ -63,10 +63,10 @@ std::unique_ptr IVFCArchive::OpenDirectory(const Path& path) c size_t IVFCFile::Read(const u64 offset, const u32 length, u8* buffer) const { LOG_TRACE(Service_FS, "called offset=%llu, length=%d", offset, length); - m_romfs_file->Seek(m_offset + offset, SEEK_SET); - u32 read_length = (u32) std::min((u64) length, m_size - offset); + romfs_file->Seek(data_offset + offset, SEEK_SET); + u32 read_length = (u32)std::min((u64)length, data_size - offset); - return m_romfs_file->ReadBytes(buffer, read_length); + return romfs_file->ReadBytes(buffer, read_length); } size_t IVFCFile::Write(const u64 offset, const u32 length, const u32 flush, const u8* buffer) const { @@ -75,7 +75,7 @@ size_t IVFCFile::Write(const u64 offset, const u32 length, const u32 flush, cons } size_t IVFCFile::GetSize() const { - return sizeof(u8) * m_size; + return sizeof(u8) * data_size; } bool IVFCFile::SetSize(const u64 size) const { diff --git a/src/core/file_sys/ivfc_archive.h b/src/core/file_sys/ivfc_archive.h index f51766114..15a59407d 100644 --- a/src/core/file_sys/ivfc_archive.h +++ b/src/core/file_sys/ivfc_archive.h @@ -26,8 +26,8 @@ namespace FileSys { */ class IVFCArchive : public ArchiveBackend { public: - IVFCArchive(std::shared_ptr romfs_file, u64 offset, u64 size) - : m_romfs_file(romfs_file), m_offset(offset), m_size(size) {} + IVFCArchive(std::shared_ptr file, u64 offset, u64 size) + : romfs_file(file), data_offset(offset), data_size(size) {} std::string GetName() const override; @@ -41,15 +41,15 @@ public: std::unique_ptr OpenDirectory(const Path& path) const override; protected: - std::shared_ptr m_romfs_file; - u64 m_offset; - u64 m_size; + std::shared_ptr romfs_file; + u64 data_offset; + u64 data_size; }; class IVFCFile : public FileBackend { public: - IVFCFile(std::shared_ptr romfs_file, u64 offset, u64 size) - : m_romfs_file(romfs_file), m_offset(offset), m_size(size) {} + IVFCFile(std::shared_ptr file, u64 offset, u64 size) + : romfs_file(file), data_offset(offset), data_size(size) {} bool Open() override { return true; } size_t Read(const u64 offset, const u32 length, u8* buffer) const override; @@ -60,9 +60,9 @@ public: void Flush() const override { } private: - std::shared_ptr m_romfs_file; - u64 m_offset; - u64 m_size; + std::shared_ptr romfs_file; + u64 data_offset; + u64 data_size; }; class IVFCDirectory : public DirectoryBackend { diff --git a/src/core/loader/loader.h b/src/core/loader/loader.h index e439a86e0..08c3f59ee 100644 --- a/src/core/loader/loader.h +++ b/src/core/loader/loader.h @@ -93,7 +93,7 @@ public: /** * Get the RomFS of the application - * Since the RomFS is huge, we return a file reference instead of copying to a buffer + * Since the RomFS can be huge, we return a file reference instead of copying to a buffer * @param romfs_file The file containing the RomFS * @param offset The offset the romfs begins on * @param size The size of the romfs diff --git a/src/core/loader/ncch.cpp b/src/core/loader/ncch.cpp index 8737041e0..5593cbf01 100644 --- a/src/core/loader/ncch.cpp +++ b/src/core/loader/ncch.cpp @@ -289,13 +289,14 @@ ResultStatus AppLoader_NCCH::ReadRomFS(std::shared_ptr& romfs_ if (file->GetSize () < romfs_offset + romfs_size) return ResultStatus::Error; - // We reopen the file, to avoid reuse of the file offset + // We reopen the file, to allow its position to be independent from file's romfs_file.reset(new FileUtil::IOFile(filepath, "rb")); + if (!romfs_file->IsOpen()) + return ResultStatus::Error; + offset = romfs_offset; size = romfs_size; - if (!romfs_file->IsOpen()) - return ResultStatus::Error; return ResultStatus::Success; } LOG_DEBUG(Loader, "NCCH has no RomFS"); diff --git a/src/core/loader/ncch.h b/src/core/loader/ncch.h index 0fe41390a..d180e77ed 100644 --- a/src/core/loader/ncch.h +++ b/src/core/loader/ncch.h @@ -163,7 +163,7 @@ namespace Loader { /// Loads an NCCH file (e.g. from a CCI, or the first NCCH in a CXI) class AppLoader_NCCH final : public AppLoader { public: - AppLoader_NCCH(std::unique_ptr&& file, std::string filepath) + AppLoader_NCCH(std::unique_ptr&& file, const std::string& filepath) : AppLoader(std::move(file)), filepath(filepath) { } /**