mirror of
https://github.com/Atmosphere-NX/Atmosphere
synced 2024-12-22 20:31:14 +00:00
sprofile: various correctness fixes.
This commit is contained in:
parent
2a0b99d9f9
commit
4e92687cab
6 changed files with 24 additions and 4 deletions
|
@ -89,9 +89,8 @@ namespace ams::fs {
|
||||||
Result DeleteSystemSaveData(SaveDataSpaceId space_id, SystemSaveDataId id, UserId user_id) {
|
Result DeleteSystemSaveData(SaveDataSpaceId space_id, SystemSaveDataId id, UserId user_id) {
|
||||||
const auto attribute = SaveDataAttribute::Make(ncm::InvalidProgramId, SaveDataType::System, user_id, id);
|
const auto attribute = SaveDataAttribute::Make(ncm::InvalidProgramId, SaveDataType::System, user_id, id);
|
||||||
|
|
||||||
/* TODO: Libnx binding for DeleteSaveDataFileSystemBySaveDataAttribute */
|
static_assert(sizeof(attribute) == sizeof(::FsSaveDataAttribute));
|
||||||
AMS_UNUSED(space_id, attribute);
|
return fsDeleteSaveDataFileSystemBySaveDataAttribute(static_cast<::FsSaveDataSpaceId>(space_id), reinterpret_cast<const ::FsSaveDataAttribute *>(std::addressof(attribute)));
|
||||||
AMS_ABORT();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Result GetSaveDataFlags(u32 *out, SaveDataId id) {
|
Result GetSaveDataFlags(u32 *out, SaveDataId id) {
|
||||||
|
|
|
@ -26,6 +26,10 @@ namespace ams::sprofile::srv {
|
||||||
ProfileManager *m_manager;
|
ProfileManager *m_manager;
|
||||||
public:
|
public:
|
||||||
ProfileImporterImpl(ProfileManager *manager) : m_manager(manager) { /* ... */ }
|
ProfileImporterImpl(ProfileManager *manager) : m_manager(manager) { /* ... */ }
|
||||||
|
|
||||||
|
~ProfileImporterImpl() {
|
||||||
|
m_manager->CloseProfileImporter();
|
||||||
|
}
|
||||||
public:
|
public:
|
||||||
Result ImportProfile(const sprofile::srv::ProfileDataForImportData &import);
|
Result ImportProfile(const sprofile::srv::ProfileDataForImportData &import);
|
||||||
Result Commit();
|
Result Commit();
|
||||||
|
|
|
@ -151,6 +151,16 @@ namespace ams::sprofile::srv {
|
||||||
return ResultSuccess();
|
return ResultSuccess();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ProfileManager::CloseProfileImporter() {
|
||||||
|
/* Acquire locks. */
|
||||||
|
std::scoped_lock lk1(m_profile_importer_mutex);
|
||||||
|
std::scoped_lock lk2(m_general_mutex);
|
||||||
|
std::scoped_lock lk3(m_fs_mutex);
|
||||||
|
|
||||||
|
/* Close our importer. */
|
||||||
|
m_profile_importer = util::nullopt;
|
||||||
|
}
|
||||||
|
|
||||||
Result ProfileManager::ImportProfile(const sprofile::srv::ProfileDataForImportData &import) {
|
Result ProfileManager::ImportProfile(const sprofile::srv::ProfileDataForImportData &import) {
|
||||||
/* Acquire locks. */
|
/* Acquire locks. */
|
||||||
std::scoped_lock lk1(m_profile_importer_mutex);
|
std::scoped_lock lk1(m_profile_importer_mutex);
|
||||||
|
@ -165,6 +175,8 @@ namespace ams::sprofile::srv {
|
||||||
/* Check that the metadata we're importing has a valid hash. */
|
/* Check that the metadata we're importing has a valid hash. */
|
||||||
{
|
{
|
||||||
crypto::Md5Generator md5;
|
crypto::Md5Generator md5;
|
||||||
|
md5.Initialize();
|
||||||
|
|
||||||
md5.Update(std::addressof(import.header), sizeof(import.header));
|
md5.Update(std::addressof(import.header), sizeof(import.header));
|
||||||
md5.Update(std::addressof(import.data), sizeof(import.data) - sizeof(import.data.entries[0]) * (util::size(import.data.entries) - std::min<size_t>(import.data.num_entries, util::size(import.data.entries))));
|
md5.Update(std::addressof(import.data), sizeof(import.data) - sizeof(import.data.entries[0]) * (util::size(import.data.entries) - std::min<size_t>(import.data.num_entries, util::size(import.data.entries))));
|
||||||
|
|
||||||
|
@ -258,6 +270,8 @@ namespace ams::sprofile::srv {
|
||||||
/* Check that the metadata we're importing has a valid hash. */
|
/* Check that the metadata we're importing has a valid hash. */
|
||||||
{
|
{
|
||||||
crypto::Md5Generator md5;
|
crypto::Md5Generator md5;
|
||||||
|
md5.Initialize();
|
||||||
|
|
||||||
md5.Update(std::addressof(import.header), sizeof(import.header));
|
md5.Update(std::addressof(import.header), sizeof(import.header));
|
||||||
md5.Update(std::addressof(import.metadata), sizeof(import.metadata));
|
md5.Update(std::addressof(import.metadata), sizeof(import.metadata));
|
||||||
md5.Update(std::addressof(import.profile_urls), sizeof(import.profile_urls[0]) * std::min<size_t>(import.metadata.num_entries, util::size(import.metadata.entries)));
|
md5.Update(std::addressof(import.profile_urls), sizeof(import.profile_urls[0]) * std::min<size_t>(import.metadata.num_entries, util::size(import.metadata.entries)));
|
||||||
|
|
|
@ -50,6 +50,8 @@ namespace ams::sprofile::srv {
|
||||||
Result ResetSaveData();
|
Result ResetSaveData();
|
||||||
|
|
||||||
Result OpenProfileImporter();
|
Result OpenProfileImporter();
|
||||||
|
void CloseProfileImporter();
|
||||||
|
|
||||||
Result ImportProfile(const sprofile::srv::ProfileDataForImportData &data);
|
Result ImportProfile(const sprofile::srv::ProfileDataForImportData &data);
|
||||||
Result Commit();
|
Result Commit();
|
||||||
Result ImportMetadata(const sprofile::srv::ProfileMetadataForImportMetadata &data);
|
Result ImportMetadata(const sprofile::srv::ProfileMetadataForImportMetadata &data);
|
||||||
|
|
|
@ -74,6 +74,7 @@ namespace ams::sprofile::srv {
|
||||||
return ResultSuccess();
|
return ResultSuccess();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Result ServiceForBgAgent::IsUpdateNeeded(sf::Out<bool> out, Identifier revision_key) {
|
Result ServiceForBgAgent::IsUpdateNeeded(sf::Out<bool> out, Identifier revision_key) {
|
||||||
/* Load primary metadata. */
|
/* Load primary metadata. */
|
||||||
bool loaded_metadata = true;
|
bool loaded_metadata = true;
|
||||||
|
|
|
@ -149,7 +149,7 @@ namespace ams::crypto::impl {
|
||||||
|
|
||||||
/* Copy in any leftover data. */
|
/* Copy in any leftover data. */
|
||||||
if (const auto left = size % BlockSize; left > 0) {
|
if (const auto left = size % BlockSize; left > 0) {
|
||||||
std::memcpy(m_y, cur_block, size);
|
std::memcpy(m_y, cur_block, left);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue