es: Implement ETicket ListPersonalizedTicket (12)
Returns an application-specific number of entries of personal tickets, starting at offset 0.
This commit is contained in:
parent
5d6bf75296
commit
669a21babb
|
@ -27,7 +27,7 @@ public:
|
||||||
{9, &ETicket::CountCommonTicket, "CountCommonTicket"},
|
{9, &ETicket::CountCommonTicket, "CountCommonTicket"},
|
||||||
{10, &ETicket::CountPersonalizedTicket, "CountPersonalizedTicket"},
|
{10, &ETicket::CountPersonalizedTicket, "CountPersonalizedTicket"},
|
||||||
{11, &ETicket::ListCommonTicket, "ListCommonTicket"},
|
{11, &ETicket::ListCommonTicket, "ListCommonTicket"},
|
||||||
{12, nullptr, "ListPersonalizedTicket"},
|
{12, &ETicket::ListPersonalizedTicket, "ListPersonalizedTicket"},
|
||||||
{13, nullptr, "ListMissingPersonalizedTicket"},
|
{13, nullptr, "ListMissingPersonalizedTicket"},
|
||||||
{14, nullptr, "GetCommonTicketSize"},
|
{14, nullptr, "GetCommonTicketSize"},
|
||||||
{15, nullptr, "GetPersonalizedTicketSize"},
|
{15, nullptr, "GetPersonalizedTicketSize"},
|
||||||
|
@ -167,6 +167,29 @@ private:
|
||||||
rb.Push<u32>(out_entries);
|
rb.Push<u32>(out_entries);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ListPersonalizedTicket(Kernel::HLERequestContext& ctx) {
|
||||||
|
u32 out_entries;
|
||||||
|
if (keys.GetPersonalizedTickets().empty())
|
||||||
|
out_entries = 0;
|
||||||
|
else
|
||||||
|
out_entries = ctx.GetWriteBufferSize() / sizeof(u128);
|
||||||
|
|
||||||
|
LOG_DEBUG(Service_ETicket, "called, entries={:016X}", out_entries);
|
||||||
|
|
||||||
|
keys.PopulateTickets();
|
||||||
|
const auto tickets = keys.GetPersonalizedTickets();
|
||||||
|
std::vector<u128> ids;
|
||||||
|
std::transform(tickets.begin(), tickets.end(), std::back_inserter(ids),
|
||||||
|
[](const auto& pair) { return pair.first; });
|
||||||
|
|
||||||
|
out_entries = std::min<u32>(ids.size(), out_entries);
|
||||||
|
ctx.WriteBuffer(ids.data(), out_entries * sizeof(u128));
|
||||||
|
|
||||||
|
IPC::ResponseBuilder rb{ctx, 3};
|
||||||
|
rb.Push(RESULT_SUCCESS);
|
||||||
|
rb.Push<u32>(out_entries);
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void InstallInterfaces(SM::ServiceManager& service_manager) {
|
void InstallInterfaces(SM::ServiceManager& service_manager) {
|
||||||
|
|
Reference in New Issue