archive_systemsavedata: Remove pointer cast from GetSystemSaveDataPath()

These kinds of casts invoke undefined behavior due to alignment rules.

Use memcpy instead which always does the right thing.
This commit is contained in:
Lioncash 2018-03-28 22:16:06 -04:00
parent 74465389f3
commit 26b1aec3c1
1 changed files with 6 additions and 4 deletions

View File

@ -3,6 +3,7 @@
// Refer to the license.txt file included. // Refer to the license.txt file included.
#include <algorithm> #include <algorithm>
#include <cstring>
#include <memory> #include <memory>
#include <vector> #include <vector>
#include "common/common_types.h" #include "common/common_types.h"
@ -19,10 +20,11 @@
namespace FileSys { namespace FileSys {
std::string GetSystemSaveDataPath(const std::string& mount_point, const Path& path) { std::string GetSystemSaveDataPath(const std::string& mount_point, const Path& path) {
std::vector<u8> vec_data = path.AsBinary(); const std::vector<u8> vec_data = path.AsBinary();
const u32* data = reinterpret_cast<const u32*>(vec_data.data()); u32 save_low;
u32 save_low = data[1]; u32 save_high;
u32 save_high = data[0]; std::memcpy(&save_low, &vec_data[4], sizeof(u32));
std::memcpy(&save_high, &vec_data[0], sizeof(u32));
return Common::StringFromFormat("%s%08X/%08X/", mount_point.c_str(), save_low, save_high); return Common::StringFromFormat("%s%08X/%08X/", mount_point.c_str(), save_low, save_high);
} }