Review fixes

This commit is contained in:
Zach Hilman
2018-07-15 23:46:29 -04:00
parent 3048b04781
commit 33aa94ef5f
6 changed files with 34 additions and 17 deletions

View File

@@ -30,7 +30,7 @@
#define CONFIG_DIR "config"
#define CACHE_DIR "cache"
#define SDMC_DIR "sdmc"
#define SAVE_DIR "save"
#define NAND_DIR "nand"
#define SYSDATA_DIR "sysdata"
#define LOG_DIR "log"

View File

@@ -711,7 +711,7 @@ const std::string& GetUserPath(const unsigned int DirIDX, const std::string& new
}
#endif
paths[D_SDMC_IDX] = paths[D_USER_IDX] + SDMC_DIR DIR_SEP;
paths[D_SAVE_IDX] = paths[D_USER_IDX] + SAVE_DIR DIR_SEP;
paths[D_NAND_IDX] = paths[D_USER_IDX] + NAND_DIR DIR_SEP;
paths[D_SYSDATA_IDX] = paths[D_USER_IDX] + SYSDATA_DIR DIR_SEP;
// TODO: Put the logs in a better location for each OS
paths[D_LOGS_IDX] = paths[D_USER_IDX] + LOG_DIR DIR_SEP;
@@ -735,7 +735,7 @@ const std::string& GetUserPath(const unsigned int DirIDX, const std::string& new
paths[D_CONFIG_IDX] = paths[D_USER_IDX] + CONFIG_DIR DIR_SEP;
paths[D_CACHE_IDX] = paths[D_USER_IDX] + CACHE_DIR DIR_SEP;
paths[D_SDMC_IDX] = paths[D_USER_IDX] + SDMC_DIR DIR_SEP;
paths[D_SAVE_IDX] = paths[D_USER_IDX] + SAVE_DIR DIR_SEP;
paths[D_NAND_IDX] = paths[D_USER_IDX] + NAND_DIR DIR_SEP;
break;
}
}

View File

@@ -23,7 +23,7 @@ enum {
D_CONFIG_IDX,
D_CACHE_IDX,
D_SDMC_IDX,
D_SAVE_IDX,
D_NAND_IDX,
D_SYSDATA_IDX,
D_LOGS_IDX,
NUM_PATH_INDICES

View File

@@ -18,8 +18,8 @@ std::string SaveStructDebugInfo(SaveStruct save_struct) {
save_struct.user_id[1], save_struct.user_id[0], save_struct.save_id);
}
SaveDataFactory::SaveDataFactory(std::string save_directory)
: save_directory(std::move(save_directory)) {}
SaveDataFactory::SaveDataFactory(std::string nand_directory)
: nand_directory(std::move(nand_directory)) {}
ResultVal<std::unique_ptr<FileSystemBackend>> SaveDataFactory::Open(SaveDataSpaceId space,
SaveStruct meta) {
@@ -113,16 +113,31 @@ ResultCode SaveDataFactory::Format(SaveDataSpaceId space, SaveStruct meta) {
std::string SaveDataFactory::GetFullPath(SaveDataSpaceId space, SaveDataType type, u64 title_id,
u128 user_id, u64 save_id) const {
static std::vector<std::string> space_names = {"sysnand", "usrnand", "sd", "temp"};
static std::vector<std::string> type_names = {"system", "user", "bcat",
"device", "temp", "cache"};
if (type == SaveDataType::SaveData && title_id == 0)
title_id = Core::CurrentProcess()->program_id;
return fmt::format("{}{}/{}/{:016X}/{:016X}{:016X}/{:016X}", save_directory,
space_names[static_cast<u8>(space)], type_names[static_cast<u8>(type)],
title_id, user_id[1], user_id[0], save_id);
std::string prefix;
switch (space) {
case SaveDataSpaceId::NandSystem:
prefix = nand_directory + "system/save/";
case SaveDataSpaceId::NandUser:
prefix = nand_directory + "user/save/";
default:
ASSERT_MSG(true, "Unrecognized SaveDataSpaceId: {:02X}", static_cast<u8>(space));
}
switch (type) {
case SaveDataType::SystemSaveData:
return fmt::format("{}{:016X}/{:016X}{:016X}", prefix, save_id, user_id[1], user_id[0]);
case SaveDataType::SaveData:
return fmt::format("{}{:08X}/{:016X}{:016X}/{:016X}", prefix, 0, user_id[1], user_id[0],
title_id);
default:
ASSERT_MSG(true, "Unrecognized SaveDataType: {:02X}", static_cast<u8>(type));
}
return "";
}
} // namespace FileSys

View File

@@ -38,15 +38,17 @@ static_assert(sizeof(SaveStruct) == 0x40, "SaveStruct has incorrect size.");
std::string SaveStructDebugInfo(SaveStruct save_struct);
/// File system interface to the SaveData archive
// nand_directory should be the root of nand, sd_directory should be the root of sd
class SaveDataFactory {
public:
explicit SaveDataFactory(std::string save_directory);
SaveDataFactory(std::string nand_directory);
ResultVal<std::unique_ptr<FileSystemBackend>> Open(SaveDataSpaceId space, SaveStruct meta);
ResultCode Format(SaveDataSpaceId space, SaveStruct meta);
private:
std::string save_directory;
std::string nand_directory;
std::string sd_directory;
std::string GetFullPath(SaveDataSpaceId space, SaveDataType type, u64 title_id, u128 user_id,
u64 save_id) const;

View File

@@ -90,10 +90,10 @@ void RegisterFileSystems() {
save_data = nullptr;
sdmc = nullptr;
std::string save_directory = FileUtil::GetUserPath(D_SAVE_IDX);
std::string nand_directory = FileUtil::GetUserPath(D_NAND_IDX);
std::string sd_directory = FileUtil::GetUserPath(D_SDMC_IDX);
auto savedata = std::make_unique<FileSys::SaveDataFactory>(std::move(save_directory));
auto savedata = std::make_unique<FileSys::SaveDataFactory>(std::move(nand_directory));
RegisterSaveData(std::move(savedata));
auto sdcard = std::make_unique<FileSys::SDMCFactory>(std::move(sd_directory));