summaryrefslogtreecommitdiffstats
path: root/src/core/file_sys/patch_manager.h
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2018-09-06 00:06:11 +0200
committerGitHub <noreply@github.com>2018-09-06 00:06:11 +0200
commita6ae7654105fe6ec46ff0bcabb714b8447b83899 (patch)
tree0ff4d2396cb0730ec5952181e4e67947b64832ec /src/core/file_sys/patch_manager.h
parentMerge pull request #1245 from degasus/optimizations (diff)
parentbktr: Fix bucket overlap error (diff)
downloadyuzu-a6ae7654105fe6ec46ff0bcabb714b8447b83899.tar
yuzu-a6ae7654105fe6ec46ff0bcabb714b8447b83899.tar.gz
yuzu-a6ae7654105fe6ec46ff0bcabb714b8447b83899.tar.bz2
yuzu-a6ae7654105fe6ec46ff0bcabb714b8447b83899.tar.lz
yuzu-a6ae7654105fe6ec46ff0bcabb714b8447b83899.tar.xz
yuzu-a6ae7654105fe6ec46ff0bcabb714b8447b83899.tar.zst
yuzu-a6ae7654105fe6ec46ff0bcabb714b8447b83899.zip
Diffstat (limited to 'src/core/file_sys/patch_manager.h')
-rw-r--r--src/core/file_sys/patch_manager.h62
1 files changed, 62 insertions, 0 deletions
diff --git a/src/core/file_sys/patch_manager.h b/src/core/file_sys/patch_manager.h
new file mode 100644
index 000000000..28c7ae136
--- /dev/null
+++ b/src/core/file_sys/patch_manager.h
@@ -0,0 +1,62 @@
+// Copyright 2018 yuzu emulator team
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#pragma once
+
+#include <map>
+#include <string>
+#include "common/common_types.h"
+#include "core/file_sys/nca_metadata.h"
+#include "core/file_sys/vfs.h"
+
+namespace FileSys {
+
+class NCA;
+class NACP;
+
+enum class TitleVersionFormat : u8 {
+ ThreeElements, ///< vX.Y.Z
+ FourElements, ///< vX.Y.Z.W
+};
+
+std::string FormatTitleVersion(u32 version,
+ TitleVersionFormat format = TitleVersionFormat::ThreeElements);
+
+enum class PatchType {
+ Update,
+};
+
+std::string FormatPatchTypeName(PatchType type);
+
+// A centralized class to manage patches to games.
+class PatchManager {
+public:
+ explicit PatchManager(u64 title_id);
+
+ // Currently tracked ExeFS patches:
+ // - Game Updates
+ VirtualDir PatchExeFS(VirtualDir exefs) const;
+
+ // Currently tracked RomFS patches:
+ // - Game Updates
+ VirtualFile PatchRomFS(VirtualFile base, u64 ivfc_offset,
+ ContentRecordType type = ContentRecordType::Program) const;
+
+ // Returns a vector of pairs between patch names and patch versions.
+ // i.e. Update v80 will return {Update, 80}
+ std::map<PatchType, std::string> GetPatchVersionNames() const;
+
+ // Given title_id of the program, attempts to get the control data of the update and parse it,
+ // falling back to the base control data.
+ std::pair<std::shared_ptr<NACP>, VirtualFile> GetControlMetadata() const;
+
+ // Version of GetControlMetadata that takes an arbitrary NCA
+ std::pair<std::shared_ptr<NACP>, VirtualFile> ParseControlNCA(
+ const std::shared_ptr<NCA>& nca) const;
+
+private:
+ u64 title_id;
+};
+
+} // namespace FileSys