summaryrefslogtreecommitdiff
path: root/src/core/hle
diff options
context:
space:
mode:
authorGravatar Subv2015-01-03 20:46:05 -0500
committerGravatar Subv2015-01-03 20:46:05 -0500
commit71a063f45cba961ee07730f4ab79f2bcc3ff9b5b (patch)
tree3c134bc71fd404b33a6d6fcaed743457d7fb7e66 /src/core/hle
parentSaveDataCheck: Move the files to nand/title (diff)
downloadyuzu-71a063f45cba961ee07730f4ab79f2bcc3ff9b5b.tar.gz
yuzu-71a063f45cba961ee07730f4ab79f2bcc3ff9b5b.tar.xz
yuzu-71a063f45cba961ee07730f4ab79f2bcc3ff9b5b.zip
Archives: Changed the way paths are built for the archives.
Each archive now takes a mount point of either NAND or SDMC, and builds its own directory structure there, trying to simulate an HLE-friendly hardware layout
Diffstat (limited to 'src/core/hle')
-rw-r--r--src/core/hle/service/cfg/cfg.cpp4
-rw-r--r--src/core/hle/service/fs/archive.cpp20
-rw-r--r--src/core/hle/service/fs/archive.h5
-rw-r--r--src/core/hle/service/ptm_u.cpp6
4 files changed, 20 insertions, 15 deletions
diff --git a/src/core/hle/service/cfg/cfg.cpp b/src/core/hle/service/cfg/cfg.cpp
index 161aa8531..8812c49ef 100644
--- a/src/core/hle/service/cfg/cfg.cpp
+++ b/src/core/hle/service/cfg/cfg.cpp
@@ -161,9 +161,9 @@ ResultCode FormatConfig() {
161void CFGInit() { 161void CFGInit() {
162 // TODO(Subv): In the future we should use the FS service to query this archive, 162 // TODO(Subv): In the future we should use the FS service to query this archive,
163 // currently it is not possible because you can only have one open archive of the same type at any time 163 // currently it is not possible because you can only have one open archive of the same type at any time
164 std::string syssavedata_directory = FileUtil::GetUserPath(D_SYSSAVEDATA_IDX); 164 std::string nand_directory = FileUtil::GetUserPath(D_NAND_IDX);
165 cfg_system_save_data = Common::make_unique<FileSys::Archive_SystemSaveData>( 165 cfg_system_save_data = Common::make_unique<FileSys::Archive_SystemSaveData>(
166 syssavedata_directory, CFG_SAVE_ID); 166 nand_directory, CFG_SAVE_ID);
167 if (!cfg_system_save_data->Initialize()) { 167 if (!cfg_system_save_data->Initialize()) {
168 LOG_CRITICAL(Service_CFG, "Could not initialize SystemSaveData archive for the CFG:U service"); 168 LOG_CRITICAL(Service_CFG, "Could not initialize SystemSaveData archive for the CFG:U service");
169 return; 169 return;
diff --git a/src/core/hle/service/fs/archive.cpp b/src/core/hle/service/fs/archive.cpp
index 56d53402f..f332d6f1f 100644
--- a/src/core/hle/service/fs/archive.cpp
+++ b/src/core/hle/service/fs/archive.cpp
@@ -36,6 +36,9 @@ namespace std {
36 }; 36 };
37} 37}
38 38
39const u32 SYSTEM_ID = 0;
40const u32 SDCARD_ID = 0;
41
39namespace Service { 42namespace Service {
40namespace FS { 43namespace FS {
41 44
@@ -437,6 +440,7 @@ void ArchiveInit() {
437 // archive type is SDMC, so it is the only one getting exposed. 440 // archive type is SDMC, so it is the only one getting exposed.
438 441
439 std::string sdmc_directory = FileUtil::GetUserPath(D_SDMC_IDX); 442 std::string sdmc_directory = FileUtil::GetUserPath(D_SDMC_IDX);
443 std::string nand_directory = FileUtil::GetUserPath(D_NAND_IDX);
440 auto sdmc_archive = Common::make_unique<FileSys::Archive_SDMC>(sdmc_directory); 444 auto sdmc_archive = Common::make_unique<FileSys::Archive_SDMC>(sdmc_directory);
441 if (sdmc_archive->Initialize()) 445 if (sdmc_archive->Initialize())
442 CreateArchive(std::move(sdmc_archive), ArchiveIdCode::SDMC); 446 CreateArchive(std::move(sdmc_archive), ArchiveIdCode::SDMC);
@@ -444,28 +448,24 @@ void ArchiveInit() {
444 LOG_ERROR(Service_FS, "Can't instantiate SDMC archive with path %s", sdmc_directory.c_str()); 448 LOG_ERROR(Service_FS, "Can't instantiate SDMC archive with path %s", sdmc_directory.c_str());
445 449
446 // Create the SaveData archive 450 // Create the SaveData archive
447 std::string savedata_directory = FileUtil::GetUserPath(D_SAVEDATA_IDX); 451 auto savedata_archive = Common::make_unique<FileSys::Archive_SaveData>(sdmc_directory);
448 auto savedata_archive = Common::make_unique<FileSys::Archive_SaveData>(savedata_directory);
449 CreateArchive(std::move(savedata_archive), ArchiveIdCode::SaveData); 452 CreateArchive(std::move(savedata_archive), ArchiveIdCode::SaveData);
450 453
451 std::string extsavedata_directory = FileUtil::GetUserPath(D_EXTSAVEDATA); 454 auto extsavedata_archive = Common::make_unique<FileSys::Archive_ExtSaveData>(sdmc_directory, false);
452 auto extsavedata_archive = Common::make_unique<FileSys::Archive_ExtSaveData>(extsavedata_directory);
453 if (extsavedata_archive->Initialize()) 455 if (extsavedata_archive->Initialize())
454 CreateArchive(std::move(extsavedata_archive), ArchiveIdCode::ExtSaveData); 456 CreateArchive(std::move(extsavedata_archive), ArchiveIdCode::ExtSaveData);
455 else 457 else
456 LOG_ERROR(Service_FS, "Can't instantiate ExtSaveData archive with path %s", extsavedata_directory.c_str()); 458 LOG_ERROR(Service_FS, "Can't instantiate ExtSaveData archive with path %s", extsavedata_archive->GetMountPoint().c_str());
457 459
458 std::string sharedextsavedata_directory = FileUtil::GetUserPath(D_SHAREDEXTSAVEDATA); 460 auto sharedextsavedata_archive = Common::make_unique<FileSys::Archive_ExtSaveData>(nand_directory, true);
459 auto sharedextsavedata_archive = Common::make_unique<FileSys::Archive_ExtSaveData>(sharedextsavedata_directory);
460 if (sharedextsavedata_archive->Initialize()) 461 if (sharedextsavedata_archive->Initialize())
461 CreateArchive(std::move(sharedextsavedata_archive), ArchiveIdCode::SharedExtSaveData); 462 CreateArchive(std::move(sharedextsavedata_archive), ArchiveIdCode::SharedExtSaveData);
462 else 463 else
463 LOG_ERROR(Service_FS, "Can't instantiate SharedExtSaveData archive with path %s", 464 LOG_ERROR(Service_FS, "Can't instantiate SharedExtSaveData archive with path %s",
464 sharedextsavedata_directory.c_str()); 465 sharedextsavedata_archive->GetMountPoint().c_str());
465 466
466 // Create the SaveDataCheck archive, basically a small variation of the RomFS archive 467 // Create the SaveDataCheck archive, basically a small variation of the RomFS archive
467 std::string savedatacheck_directory = FileUtil::GetUserPath(D_SAVEDATACHECK_IDX); 468 auto savedatacheck_archive = Common::make_unique<FileSys::Archive_SaveDataCheck>(nand_directory);
468 auto savedatacheck_archive = Common::make_unique<FileSys::Archive_SaveDataCheck>(savedatacheck_directory);
469 CreateArchive(std::move(savedatacheck_archive), ArchiveIdCode::SaveDataCheck); 469 CreateArchive(std::move(savedatacheck_archive), ArchiveIdCode::SaveDataCheck);
470} 470}
471 471
diff --git a/src/core/hle/service/fs/archive.h b/src/core/hle/service/fs/archive.h
index 9e9efa019..f91a3d5f4 100644
--- a/src/core/hle/service/fs/archive.h
+++ b/src/core/hle/service/fs/archive.h
@@ -10,6 +10,11 @@
10#include "core/hle/kernel/kernel.h" 10#include "core/hle/kernel/kernel.h"
11#include "core/hle/result.h" 11#include "core/hle/result.h"
12 12
13/// The unique system identifier hash, also known as ID0
14extern const u32 SYSTEM_ID;
15/// The scrambled SD card CID, also known as ID1
16extern const u32 SDCARD_ID;
17
13namespace Service { 18namespace Service {
14namespace FS { 19namespace FS {
15 20
diff --git a/src/core/hle/service/ptm_u.cpp b/src/core/hle/service/ptm_u.cpp
index c900c90f8..fd79cd8ab 100644
--- a/src/core/hle/service/ptm_u.cpp
+++ b/src/core/hle/service/ptm_u.cpp
@@ -142,10 +142,10 @@ Interface::Interface() {
142 Register(FunctionTable, ARRAY_SIZE(FunctionTable)); 142 Register(FunctionTable, ARRAY_SIZE(FunctionTable));
143 // Create the SharedExtSaveData archive 0xF000000B and the gamecoin.dat file 143 // Create the SharedExtSaveData archive 0xF000000B and the gamecoin.dat file
144 // TODO(Subv): In the future we should use the FS service to query this archive 144 // TODO(Subv): In the future we should use the FS service to query this archive
145 std::string extsavedata_directory = FileUtil::GetUserPath(D_SHAREDEXTSAVEDATA); 145 std::string nand_directory = FileUtil::GetUserPath(D_NAND_IDX);
146 ptm_shared_extsavedata = Common::make_unique<FileSys::Archive_ExtSaveData>(extsavedata_directory); 146 ptm_shared_extsavedata = Common::make_unique<FileSys::Archive_ExtSaveData>(nand_directory, true);
147 if (!ptm_shared_extsavedata->Initialize()) { 147 if (!ptm_shared_extsavedata->Initialize()) {
148 LOG_CRITICAL(Service_PTM, "Could not initialize ExtSaveData archive for the PTM:U service"); 148 LOG_CRITICAL(Service_PTM, "Could not initialize SharedExtSaveData archive for the PTM:U service");
149 return; 149 return;
150 } 150 }
151 FileSys::Path archive_path(ptm_shared_extdata_id); 151 FileSys::Path archive_path(ptm_shared_extdata_id);