mirror of
https://github.com/Lime3DS/Lime3DS
synced 2024-12-27 17:42:40 -06:00
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:
parent
74465389f3
commit
26b1aec3c1
1 changed files with 6 additions and 4 deletions
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue