Services/APT: Reset the APT parameter inside CancelParameter if the conditions are met.
This commit is contained in:
		| @@ -314,17 +314,34 @@ void GlanceParameter(Service::Interface* self) { | |||||||
| void CancelParameter(Service::Interface* self) { | void CancelParameter(Service::Interface* self) { | ||||||
|     IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0xF, 4, 0); // 0xF0100 |     IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0xF, 4, 0); // 0xF0100 | ||||||
|  |  | ||||||
|     u32 check_sender = rp.Pop<u32>(); |     bool check_sender = rp.Pop<bool>(); | ||||||
|     u32 sender_appid = rp.Pop<u32>(); |     u32 sender_appid = rp.Pop<u32>(); | ||||||
|     u32 check_receiver = rp.Pop<u32>(); |     bool check_receiver = rp.Pop<bool>(); | ||||||
|     u32 receiver_appid = rp.Pop<u32>(); |     u32 receiver_appid = rp.Pop<u32>(); | ||||||
|     IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); |  | ||||||
|     rb.Push(RESULT_SUCCESS); // No error |  | ||||||
|     rb.Push(true);           // Set to Success |  | ||||||
|  |  | ||||||
|     LOG_WARNING(Service_APT, "(STUBBED) called check_sender=0x%08X, sender_appid=0x%08X, " |     bool cancellation_success = true; | ||||||
|                              "check_receiver=0x%08X, receiver_appid=0x%08X", |  | ||||||
|                 check_sender, sender_appid, check_receiver, receiver_appid); |     if (!next_parameter) { | ||||||
|  |         cancellation_success = false; | ||||||
|  |     } else { | ||||||
|  |         if (check_sender && next_parameter->sender_id != sender_appid) | ||||||
|  |             cancellation_success = false; | ||||||
|  |  | ||||||
|  |         if (check_receiver && next_parameter->destination_id != receiver_appid) | ||||||
|  |             cancellation_success = false; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     if (cancellation_success) | ||||||
|  |         next_parameter = boost::none; | ||||||
|  |  | ||||||
|  |     IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); | ||||||
|  |  | ||||||
|  |     rb.Push(RESULT_SUCCESS); // No error | ||||||
|  |     rb.Push(cancellation_success); | ||||||
|  |  | ||||||
|  |     LOG_DEBUG(Service_APT, "called check_sender=%u, sender_appid=0x%08X, " | ||||||
|  |                            "check_receiver=%u, receiver_appid=0x%08X", | ||||||
|  |               check_sender, sender_appid, check_receiver, receiver_appid); | ||||||
| } | } | ||||||
|  |  | ||||||
| void PrepareToStartApplication(Service::Interface* self) { | void PrepareToStartApplication(Service::Interface* self) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user