mirror of
https://github.com/Atmosphere-NX/Atmosphere.git
synced 2025-07-14 13:12:13 +02:00
ncm: Start addressing feedback
This commit is contained in:
parent
0600ee003b
commit
64109b49f8
@ -60,12 +60,9 @@ namespace ams::ncm {
|
|||||||
|
|
||||||
Value &operator[](const Key &key) {
|
Value &operator[](const Key &key) {
|
||||||
/* Try to find an existing value. */
|
/* Try to find an existing value. */
|
||||||
{
|
if (Value *value = this->Find(key); value != nullptr) {
|
||||||
Value *value = this->Find(key);
|
|
||||||
if (value) {
|
|
||||||
return *value;
|
return *value;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* Reference a new value. */
|
/* Reference a new value. */
|
||||||
for (size_t i = 0; i < N; i++) {
|
for (size_t i = 0; i < N; i++) {
|
||||||
|
@ -58,12 +58,13 @@ namespace ams::ncm {
|
|||||||
IContentMetaDatabase(ams::kvdb::MemoryKeyValueStore<ContentMetaKey>* kvs) :
|
IContentMetaDatabase(ams::kvdb::MemoryKeyValueStore<ContentMetaKey>* kvs) :
|
||||||
kvs(kvs), disabled(false)
|
kvs(kvs), disabled(false)
|
||||||
{
|
{
|
||||||
|
/* ... */
|
||||||
}
|
}
|
||||||
|
|
||||||
IContentMetaDatabase(ams::kvdb::MemoryKeyValueStore<ContentMetaKey>* kvs, const char* mount_name) :
|
IContentMetaDatabase(ams::kvdb::MemoryKeyValueStore<ContentMetaKey>* kvs, const char* mount_name) :
|
||||||
IContentMetaDatabase(kvs)
|
IContentMetaDatabase(kvs)
|
||||||
{
|
{
|
||||||
strcpy(this->mount_name, mount_name);
|
std::strcpy(this->mount_name, mount_name);
|
||||||
}
|
}
|
||||||
public:
|
public:
|
||||||
/* Actual commands. */
|
/* Actual commands. */
|
||||||
|
@ -52,7 +52,7 @@ namespace ams::ncm::impl {
|
|||||||
this->content_storage_id = content_storage_id;
|
this->content_storage_id = content_storage_id;
|
||||||
this->content_storage = nullptr;
|
this->content_storage = nullptr;
|
||||||
MountName mount_name = fs::CreateUniqueMountName();
|
MountName mount_name = fs::CreateUniqueMountName();
|
||||||
strcpy(this->mount_point, mount_name.name);
|
std::strcpy(this->mount_point, mount_name.name);
|
||||||
snprintf(this->root_path, 0x80, "%s:/", this->mount_point);
|
snprintf(this->root_path, 0x80, "%s:/", this->mount_point);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -67,9 +67,9 @@ namespace ams::ncm::impl {
|
|||||||
|
|
||||||
static_assert(sizeof(SaveDataMeta) == 0x20, "SaveDataMeta definition!");
|
static_assert(sizeof(SaveDataMeta) == 0x20, "SaveDataMeta definition!");
|
||||||
|
|
||||||
struct ContentMetaDBEntry {
|
struct ContentMetaDatabaseEntry {
|
||||||
NON_COPYABLE(ContentMetaDBEntry);
|
NON_COPYABLE(ContentMetaDatabaseEntry);
|
||||||
NON_MOVEABLE(ContentMetaDBEntry);
|
NON_MOVEABLE(ContentMetaDatabaseEntry);
|
||||||
|
|
||||||
char mount_point[16];
|
char mount_point[16];
|
||||||
char meta_path[128];
|
char meta_path[128];
|
||||||
@ -79,7 +79,7 @@ namespace ams::ncm::impl {
|
|||||||
std::optional<kvdb::MemoryKeyValueStore<ContentMetaKey>> kvs;
|
std::optional<kvdb::MemoryKeyValueStore<ContentMetaKey>> kvs;
|
||||||
u32 max_content_metas;
|
u32 max_content_metas;
|
||||||
|
|
||||||
inline ContentMetaDBEntry() : storage_id(StorageId::None), save_meta({0}),
|
inline ContentMetaDatabaseEntry() : storage_id(StorageId::None), save_meta({0}),
|
||||||
content_meta_database(nullptr), kvs(std::nullopt), max_content_metas(0) {
|
content_meta_database(nullptr), kvs(std::nullopt), max_content_metas(0) {
|
||||||
mount_point[0] = '\0';
|
mount_point[0] = '\0';
|
||||||
meta_path[0] = '\0';
|
meta_path[0] = '\0';
|
||||||
@ -90,7 +90,7 @@ namespace ams::ncm::impl {
|
|||||||
this->max_content_metas = max_content_metas;
|
this->max_content_metas = max_content_metas;
|
||||||
this->save_meta = save_meta;
|
this->save_meta = save_meta;
|
||||||
this->content_meta_database = nullptr;
|
this->content_meta_database = nullptr;
|
||||||
this->kvs.reset();
|
this->kvs = std::nullopt;
|
||||||
MountName mount_name = fs::CreateUniqueMountName();
|
MountName mount_name = fs::CreateUniqueMountName();
|
||||||
strcpy(this->mount_point, mount_name.name);
|
strcpy(this->mount_point, mount_name.name);
|
||||||
this->mount_point[0] = '#';
|
this->mount_point[0] = '#';
|
||||||
@ -102,18 +102,18 @@ namespace ams::ncm::impl {
|
|||||||
this->storage_id = StorageId::GameCard;
|
this->storage_id = StorageId::GameCard;
|
||||||
this->max_content_metas = max_content_metas;
|
this->max_content_metas = max_content_metas;
|
||||||
this->content_meta_database = nullptr;
|
this->content_meta_database = nullptr;
|
||||||
this->kvs.reset();
|
this->kvs = std::nullopt;
|
||||||
return ResultSuccess();
|
return ResultSuccess();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
constexpr size_t MaxContentStorageEntries = 8;
|
constexpr size_t MaxContentStorageEntries = 8;
|
||||||
constexpr size_t MaxContentMetaDBEntries = 8;
|
constexpr size_t MaxContentMetaDatabaseEntries = 8;
|
||||||
|
|
||||||
os::Mutex g_mutex;
|
os::Mutex g_mutex;
|
||||||
bool g_initialized = false;
|
bool g_initialized = false;
|
||||||
ContentStorageEntry g_content_storage_entries[MaxContentStorageEntries];
|
ContentStorageEntry g_content_storage_entries[MaxContentStorageEntries];
|
||||||
ContentMetaDBEntry g_content_meta_entries[MaxContentMetaDBEntries];
|
ContentMetaDatabaseEntry g_content_meta_entries[MaxContentMetaDatabaseEntries];
|
||||||
u32 g_num_content_storage_entries;
|
u32 g_num_content_storage_entries;
|
||||||
u32 g_num_content_meta_entries;
|
u32 g_num_content_meta_entries;
|
||||||
RightsIdCache g_rights_id_cache;
|
RightsIdCache g_rights_id_cache;
|
||||||
@ -130,9 +130,9 @@ namespace ams::ncm::impl {
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
ContentMetaDBEntry* FindContentMetaDBEntry(StorageId storage_id) {
|
ContentMetaDatabaseEntry* FindContentMetaDatabaseEntry(StorageId storage_id) {
|
||||||
for (size_t i = 0; i < MaxContentMetaDBEntries; i++) {
|
for (size_t i = 0; i < MaxContentMetaDatabaseEntries; i++) {
|
||||||
ContentMetaDBEntry* entry = &g_content_meta_entries[i];
|
ContentMetaDatabaseEntry* entry = &g_content_meta_entries[i];
|
||||||
|
|
||||||
if (entry->storage_id == storage_id) {
|
if (entry->storage_id == storage_id) {
|
||||||
return entry;
|
return entry;
|
||||||
@ -157,8 +157,8 @@ namespace ams::ncm::impl {
|
|||||||
entry->storage_id = StorageId::None;
|
entry->storage_id = StorageId::None;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (size_t i = 0; i < MaxContentMetaDBEntries; i++) {
|
for (size_t i = 0; i < MaxContentMetaDatabaseEntries; i++) {
|
||||||
ContentMetaDBEntry* entry = &g_content_meta_entries[i];
|
ContentMetaDatabaseEntry* entry = &g_content_meta_entries[i];
|
||||||
entry->storage_id = StorageId::None;
|
entry->storage_id = StorageId::None;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -261,14 +261,14 @@ namespace ams::ncm::impl {
|
|||||||
InactivateContentStorage(entry->storage_id);
|
InactivateContentStorage(entry->storage_id);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (size_t i = 0; i < MaxContentMetaDBEntries; i++) {
|
for (size_t i = 0; i < MaxContentMetaDatabaseEntries; i++) {
|
||||||
ContentMetaDBEntry* entry = &g_content_meta_entries[i];
|
ContentMetaDatabaseEntry* entry = &g_content_meta_entries[i];
|
||||||
InactivateContentMetaDatabase(entry->storage_id);
|
InactivateContentMetaDatabase(entry->storage_id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (size_t i = 0; i < MaxContentMetaDBEntries; i++) {
|
for (size_t i = 0; i < MaxContentMetaDatabaseEntries; i++) {
|
||||||
ContentMetaDBEntry* entry = &g_content_meta_entries[i];
|
ContentMetaDatabaseEntry* entry = &g_content_meta_entries[i];
|
||||||
entry->kvs.reset();
|
entry->kvs.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -453,7 +453,7 @@ namespace ams::ncm::impl {
|
|||||||
R_UNLESS(storage_id != StorageId::GameCard, ncm::ResultUnknownStorage());
|
R_UNLESS(storage_id != StorageId::GameCard, ncm::ResultUnknownStorage());
|
||||||
R_UNLESS(static_cast<u8>(storage_id) != 6, ncm::ResultUnknownStorage());
|
R_UNLESS(static_cast<u8>(storage_id) != 6, ncm::ResultUnknownStorage());
|
||||||
|
|
||||||
ContentMetaDBEntry* entry = FindContentMetaDBEntry(storage_id);
|
ContentMetaDatabaseEntry* entry = FindContentMetaDatabaseEntry(storage_id);
|
||||||
R_UNLESS(entry, ncm::ResultUnknownStorage());
|
R_UNLESS(entry, ncm::ResultUnknownStorage());
|
||||||
|
|
||||||
/* N doesn't bother checking the result of this. */
|
/* N doesn't bother checking the result of this. */
|
||||||
@ -483,7 +483,7 @@ namespace ams::ncm::impl {
|
|||||||
R_UNLESS(storage_id != StorageId::None, ncm::ResultUnknownStorage());
|
R_UNLESS(storage_id != StorageId::None, ncm::ResultUnknownStorage());
|
||||||
R_UNLESS(static_cast<u8>(storage_id) != 6, ncm::ResultUnknownStorage());
|
R_UNLESS(static_cast<u8>(storage_id) != 6, ncm::ResultUnknownStorage());
|
||||||
|
|
||||||
ContentMetaDBEntry* entry = FindContentMetaDBEntry(storage_id);
|
ContentMetaDatabaseEntry* entry = FindContentMetaDatabaseEntry(storage_id);
|
||||||
R_UNLESS(entry, ncm::ResultUnknownStorage());
|
R_UNLESS(entry, ncm::ResultUnknownStorage());
|
||||||
|
|
||||||
bool mounted_save_data = false;
|
bool mounted_save_data = false;
|
||||||
@ -511,7 +511,7 @@ namespace ams::ncm::impl {
|
|||||||
R_UNLESS(storage_id != StorageId::None, ncm::ResultUnknownStorage());
|
R_UNLESS(storage_id != StorageId::None, ncm::ResultUnknownStorage());
|
||||||
R_UNLESS(static_cast<u8>(storage_id) != 6, ncm::ResultUnknownStorage());
|
R_UNLESS(static_cast<u8>(storage_id) != 6, ncm::ResultUnknownStorage());
|
||||||
|
|
||||||
ContentMetaDBEntry* entry = FindContentMetaDBEntry(storage_id);
|
ContentMetaDatabaseEntry* entry = FindContentMetaDatabaseEntry(storage_id);
|
||||||
R_UNLESS(entry, ncm::ResultUnknownStorage());
|
R_UNLESS(entry, ncm::ResultUnknownStorage());
|
||||||
|
|
||||||
std::shared_ptr<IContentMetaDatabase> content_meta_db = entry->content_meta_database;
|
std::shared_ptr<IContentMetaDatabase> content_meta_db = entry->content_meta_database;
|
||||||
@ -550,7 +550,7 @@ namespace ams::ncm::impl {
|
|||||||
|
|
||||||
R_UNLESS(storage_id != StorageId::None, ncm::ResultUnknownStorage());
|
R_UNLESS(storage_id != StorageId::None, ncm::ResultUnknownStorage());
|
||||||
|
|
||||||
ContentMetaDBEntry* entry = FindContentMetaDBEntry(storage_id);
|
ContentMetaDatabaseEntry* entry = FindContentMetaDatabaseEntry(storage_id);
|
||||||
R_UNLESS(entry, ncm::ResultUnknownStorage());
|
R_UNLESS(entry, ncm::ResultUnknownStorage());
|
||||||
|
|
||||||
std::shared_ptr<IContentMetaDatabase> content_meta_db = entry->content_meta_database;
|
std::shared_ptr<IContentMetaDatabase> content_meta_db = entry->content_meta_database;
|
||||||
@ -574,7 +574,7 @@ namespace ams::ncm::impl {
|
|||||||
R_UNLESS(storage_id != StorageId::None, ncm::ResultUnknownStorage());
|
R_UNLESS(storage_id != StorageId::None, ncm::ResultUnknownStorage());
|
||||||
R_UNLESS(static_cast<u8>(storage_id) != 6, ncm::ResultUnknownStorage());
|
R_UNLESS(static_cast<u8>(storage_id) != 6, ncm::ResultUnknownStorage());
|
||||||
|
|
||||||
ContentMetaDBEntry* entry = FindContentMetaDBEntry(storage_id);
|
ContentMetaDatabaseEntry* entry = FindContentMetaDatabaseEntry(storage_id);
|
||||||
R_UNLESS(entry, ncm::ResultUnknownStorage());
|
R_UNLESS(entry, ncm::ResultUnknownStorage());
|
||||||
|
|
||||||
R_TRY(fsDeleteSaveDataFileSystemBySaveDataSpaceId(entry->save_meta.space_id, entry->save_meta.id));
|
R_TRY(fsDeleteSaveDataFileSystemBySaveDataSpaceId(entry->save_meta.space_id, entry->save_meta.id));
|
||||||
@ -587,7 +587,7 @@ namespace ams::ncm::impl {
|
|||||||
R_UNLESS(storage_id != StorageId::None, ncm::ResultUnknownStorage());
|
R_UNLESS(storage_id != StorageId::None, ncm::ResultUnknownStorage());
|
||||||
R_UNLESS(static_cast<u8>(storage_id) != 6, ncm::ResultUnknownStorage());
|
R_UNLESS(static_cast<u8>(storage_id) != 6, ncm::ResultUnknownStorage());
|
||||||
|
|
||||||
ContentMetaDBEntry* entry = FindContentMetaDBEntry(storage_id);
|
ContentMetaDatabaseEntry* entry = FindContentMetaDatabaseEntry(storage_id);
|
||||||
R_UNLESS(entry, ncm::ResultUnknownStorage());
|
R_UNLESS(entry, ncm::ResultUnknownStorage());
|
||||||
/* Already activated. */
|
/* Already activated. */
|
||||||
R_UNLESS(entry->content_meta_database == nullptr, ResultSuccess());
|
R_UNLESS(entry->content_meta_database == nullptr, ResultSuccess());
|
||||||
@ -620,7 +620,7 @@ namespace ams::ncm::impl {
|
|||||||
R_UNLESS(storage_id != StorageId::None, ncm::ResultUnknownStorage());
|
R_UNLESS(storage_id != StorageId::None, ncm::ResultUnknownStorage());
|
||||||
R_UNLESS(static_cast<u8>(storage_id) != 6, ncm::ResultUnknownStorage());
|
R_UNLESS(static_cast<u8>(storage_id) != 6, ncm::ResultUnknownStorage());
|
||||||
|
|
||||||
ContentMetaDBEntry* entry = FindContentMetaDBEntry(storage_id);
|
ContentMetaDatabaseEntry* entry = FindContentMetaDatabaseEntry(storage_id);
|
||||||
R_UNLESS(entry, ncm::ResultUnknownStorage());
|
R_UNLESS(entry, ncm::ResultUnknownStorage());
|
||||||
/* Already inactivated. */
|
/* Already inactivated. */
|
||||||
R_UNLESS(entry->content_meta_database != nullptr, ResultSuccess());
|
R_UNLESS(entry->content_meta_database != nullptr, ResultSuccess());
|
||||||
|
Loading…
Reference in New Issue
Block a user