summaryrefslogtreecommitdiffstats
path: root/src/core/file_sys/fssystem/fssystem_compression_configuration.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/file_sys/fssystem/fssystem_compression_configuration.cpp')
-rw-r--r--src/core/file_sys/fssystem/fssystem_compression_configuration.cpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/core/file_sys/fssystem/fssystem_compression_configuration.cpp b/src/core/file_sys/fssystem/fssystem_compression_configuration.cpp
new file mode 100644
index 000000000..8734f84ca
--- /dev/null
+++ b/src/core/file_sys/fssystem/fssystem_compression_configuration.cpp
@@ -0,0 +1,36 @@
+// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "common/lz4_compression.h"
+#include "core/file_sys/fssystem/fssystem_compression_configuration.h"
+
+namespace FileSys {
+
+namespace {
+
+Result DecompressLz4(void* dst, size_t dst_size, const void* src, size_t src_size) {
+ auto result = Common::Compression::DecompressLZ4(dst, dst_size, src, src_size);
+ R_UNLESS(static_cast<size_t>(result) == dst_size, ResultUnexpectedInCompressedStorageC);
+ R_SUCCEED();
+}
+
+constexpr DecompressorFunction GetNcaDecompressorFunction(CompressionType type) {
+ switch (type) {
+ case CompressionType::Lz4:
+ return DecompressLz4;
+ default:
+ return nullptr;
+ }
+}
+
+constexpr NcaCompressionConfiguration g_nca_compression_configuration{
+ .get_decompressor = GetNcaDecompressorFunction,
+};
+
+} // namespace
+
+const NcaCompressionConfiguration* GetNcaCompressionConfiguration() {
+ return std::addressof(g_nca_compression_configuration);
+}
+
+} // namespace FileSys