diff --git a/nx/include/switch/services/ncm.h b/nx/include/switch/services/ncm.h index 2ddb42e4..5831a3a0 100644 --- a/nx/include/switch/services/ncm.h +++ b/nx/include/switch/services/ncm.h @@ -93,3 +93,4 @@ Result ncmContentMetaDatabaseListApplication(NcmContentMetaDatabase* db, u8 filt Result ncmContentMetaDatabaseHas(NcmContentMetaDatabase* db, const NcmMetaRecord* record, bool* out); Result ncmContentMetaDatabaseDisableForcibly(NcmContentMetaDatabase* db); Result ncmContentMetaDatabaseCommit(NcmContentMetaDatabase* db); +Result ncmContentMetaDatabaseGetAttributes(NcmContentMetaDatabase* db, const NcmMetaRecord* record, u8* out); diff --git a/nx/source/services/ncm.c b/nx/source/services/ncm.c index bdf96b00..25cbd8a7 100644 --- a/nx/source/services/ncm.c +++ b/nx/source/services/ncm.c @@ -986,3 +986,40 @@ Result ncmContentMetaDatabaseCommit(NcmContentMetaDatabase* db) { return rc; } + +Result ncmContentMetaDatabaseGetAttributes(NcmContentMetaDatabase* db, const NcmMetaRecord* record, u8* out) { + IpcCommand c; + ipcInitialize(&c); + + struct { + u64 magic; + u64 cmd_id; + NcmMetaRecord meta_record; + } *raw; + + raw = ipcPrepareHeader(&c, sizeof(*raw)); + + raw->magic = SFCI_MAGIC; + raw->cmd_id = 18; + memcpy(&raw->meta_record, record, sizeof(NcmMetaRecord)); + + Result rc = serviceIpcDispatch(&db->s); + if (R_SUCCEEDED(rc)) { + IpcParsedCommand r; + ipcParse(&r); + + struct { + u64 magic; + u64 result; + u8 out; + } *resp = r.Raw; + + rc = resp->result; + + if (R_SUCCEEDED(rc)) { + if (out) *out = resp->out; + } + } + + return rc; +}