From c14e5713f52cd58f2a8206d844448a8c2d1a54b6 Mon Sep 17 00:00:00 2001 From: Emmanuel Gil Peyrot Date: Fri, 12 Sep 2014 00:47:05 +0200 Subject: Core: Add a method to obtain a Directory from an Archive. --- src/core/file_sys/archive.h | 8 ++++++++ src/core/file_sys/archive_romfs.cpp | 10 ++++++++++ src/core/file_sys/archive_romfs.h | 7 +++++++ src/core/file_sys/archive_sdmc.cpp | 12 ++++++++++++ src/core/file_sys/archive_sdmc.h | 7 +++++++ 5 files changed, 44 insertions(+) (limited to 'src/core/file_sys') diff --git a/src/core/file_sys/archive.h b/src/core/file_sys/archive.h index 67440ef5..560db6de 100644 --- a/src/core/file_sys/archive.h +++ b/src/core/file_sys/archive.h @@ -10,6 +10,7 @@ #include "common/bit_field.h" #include "core/file_sys/file.h" +#include "core/file_sys/directory.h" #include "core/hle/kernel/kernel.h" @@ -55,6 +56,13 @@ public: */ virtual std::unique_ptr OpenFile(const std::string& path, const Mode mode) const = 0; + /** + * Open a directory specified by its path + * @param path Path relative to the archive + * @return Opened directory, or nullptr + */ + virtual std::unique_ptr OpenDirectory(const std::string& path) const = 0; + /** * Read data from the archive * @param offset Offset in bytes to start reading data from diff --git a/src/core/file_sys/archive_romfs.cpp b/src/core/file_sys/archive_romfs.cpp index 99ded4d8..9bab3471 100644 --- a/src/core/file_sys/archive_romfs.cpp +++ b/src/core/file_sys/archive_romfs.cpp @@ -5,6 +5,7 @@ #include "common/common_types.h" #include "core/file_sys/archive_romfs.h" +#include "core/file_sys/directory_romfs.h" #include "core/file_sys/file_romfs.h" //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -32,6 +33,15 @@ std::unique_ptr Archive_RomFS::OpenFile(const std::string& path, const Mod return std::unique_ptr(new File_RomFS); } +/** + * Open a directory specified by its path + * @param path Path relative to the archive + * @return Opened directory, or nullptr + */ +std::unique_ptr Archive_RomFS::OpenDirectory(const std::string& path) const { + return std::unique_ptr(new Directory_RomFS); +} + /** * Read data from the archive * @param offset Offset in bytes to start reading data from diff --git a/src/core/file_sys/archive_romfs.h b/src/core/file_sys/archive_romfs.h index a7669dd7..fcdefa95 100644 --- a/src/core/file_sys/archive_romfs.h +++ b/src/core/file_sys/archive_romfs.h @@ -36,6 +36,13 @@ public: */ std::unique_ptr OpenFile(const std::string& path, const Mode mode) const override; + /** + * Open a directory specified by its path + * @param path Path relative to the archive + * @return Opened directory, or nullptr + */ + std::unique_ptr OpenDirectory(const std::string& path) const override; + /** * Read data from the archive * @param offset Offset in bytes to start reading data from diff --git a/src/core/file_sys/archive_sdmc.cpp b/src/core/file_sys/archive_sdmc.cpp index fb155430..30d33be5 100644 --- a/src/core/file_sys/archive_sdmc.cpp +++ b/src/core/file_sys/archive_sdmc.cpp @@ -8,6 +8,7 @@ #include "common/file_util.h" #include "core/file_sys/archive_sdmc.h" +#include "core/file_sys/directory_sdmc.h" #include "core/file_sys/file_sdmc.h" //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -44,6 +45,17 @@ std::unique_ptr Archive_SDMC::OpenFile(const std::string& path, const Mode return std::unique_ptr(file); } +/** + * Open a directory specified by its path + * @param path Path relative to the archive + * @return Opened directory, or nullptr + */ +std::unique_ptr Archive_SDMC::OpenDirectory(const std::string& path) const { + DEBUG_LOG(FILESYS, "called path=%s", path.c_str()); + Directory_SDMC* directory = new Directory_SDMC(this, path); + return std::unique_ptr(directory); +} + /** * Read data from the archive * @param offset Offset in bytes to start reading archive from diff --git a/src/core/file_sys/archive_sdmc.h b/src/core/file_sys/archive_sdmc.h index 931817e5..946f8b95 100644 --- a/src/core/file_sys/archive_sdmc.h +++ b/src/core/file_sys/archive_sdmc.h @@ -36,6 +36,13 @@ public: */ std::unique_ptr OpenFile(const std::string& path, const Mode mode) const override; + /** + * Open a directory specified by its path + * @param path Path relative to the archive + * @return Opened directory, or nullptr + */ + std::unique_ptr OpenDirectory(const std::string& path) const override; + /** * Read data from the archive * @param offset Offset in bytes to start reading archive from -- cgit v1.2.3