aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/file_sys/archive_savedatacheck.cpp
diff options
context:
space:
mode:
authorGravatar Subv <subv2112@gmail.com>2015-01-01 12:39:27 -0500
committerGravatar Subv <subv2112@gmail.com>2015-01-02 21:13:54 -0500
commitaade417b143a756da10b69747793c707ef8316fd (patch)
treed5fd49926dbfb4e7c289a8fa060df9c1e4401fde /src/core/file_sys/archive_savedatacheck.cpp
parent13efbdc2014177b84cae82e522b191e2f2f022df (diff)
Archives: Reduced duplicate code in RomFS and SaveCheck.
Fixed a few warnings and cleaned up the code
Diffstat (limited to 'src/core/file_sys/archive_savedatacheck.cpp')
-rw-r--r--src/core/file_sys/archive_savedatacheck.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/core/file_sys/archive_savedatacheck.cpp b/src/core/file_sys/archive_savedatacheck.cpp
new file mode 100644
index 00000000..233158a0
--- /dev/null
+++ b/src/core/file_sys/archive_savedatacheck.cpp
@@ -0,0 +1,41 @@
+// Copyright 2014 Citra Emulator Project
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#include "common/file_util.h"
+
+#include "core/file_sys/archive_savedatacheck.h"
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// FileSys namespace
+
+namespace FileSys {
+
+Archive_SaveDataCheck::Archive_SaveDataCheck(const std::string& mount_loc) : mount_point(mount_loc) {
+}
+
+ResultCode Archive_SaveDataCheck::Open(const Path& path) {
+ // TODO(Subv): We should not be overwriting raw_data everytime this function is called,
+ // but until we use factory classes to create the archives at runtime instead of creating them beforehand
+ // and allow multiple archives of the same type to be open at the same time without clobbering each other,
+ // we won't be able to maintain the state of each archive, hence we overwrite it every time it's needed.
+ // There are a number of problems with this, for example opening a file in this archive, then opening
+ // this archive again with a different path, will corrupt the previously open file.
+ auto vec = path.AsBinary();
+ const u32* data = reinterpret_cast<u32*>(vec.data());
+ std::string file_path = Common::StringFromFormat("%s%08x%08x.bin", mount_point.c_str(), data[1], data[0]);
+ FileUtil::IOFile file(file_path, "rb");
+
+ std::fill(raw_data.begin(), raw_data.end(), 0);
+
+ if (!file.IsOpen()) {
+ return ResultCode(-1); // TODO(Subv): Find the right error code
+ }
+ auto size = file.GetSize();
+ raw_data.resize(size);
+ file.ReadBytes(raw_data.data(), size);
+ file.Close();
+ return RESULT_SUCCESS;
+}
+
+} // namespace FileSys