mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu.git
				synced 2025-05-12 00:45:25 +00:00 
			
		
		
		
	SVC: Replace GetPointer usage with Read32 in ReplyAndReceive.
This commit is contained in:
		
							parent
							
								
									b863d6c860
								
							
						
					
					
						commit
						0cfb231e00
					
				@ -69,11 +69,10 @@ void Wrap() {
 | 
			
		||||
    FuncReturn(retval);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <ResultCode func(s32*, u32*, s32, u32)>
 | 
			
		||||
template <ResultCode func(s32*, VAddr, s32, u32)>
 | 
			
		||||
void Wrap() {
 | 
			
		||||
    s32 param_1 = 0;
 | 
			
		||||
    u32 retval =
 | 
			
		||||
        func(¶m_1, (Kernel::Handle*)Memory::GetPointer(PARAM(1)), (s32)PARAM(2), PARAM(3)).raw;
 | 
			
		||||
    u32 retval = func(¶m_1, PARAM(1), (s32)PARAM(2), PARAM(3)).raw;
 | 
			
		||||
 | 
			
		||||
    Core::CPU().SetReg(1, (u32)param_1);
 | 
			
		||||
    FuncReturn(retval);
 | 
			
		||||
 | 
			
		||||
@ -452,10 +452,9 @@ static ResultCode WaitSynchronizationN(s32* out, VAddr handles_address, s32 hand
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// In a single operation, sends a IPC reply and waits for a new request.
 | 
			
		||||
static ResultCode ReplyAndReceive(s32* index, Kernel::Handle* handles, s32 handle_count,
 | 
			
		||||
static ResultCode ReplyAndReceive(s32* index, VAddr handles_address, s32 handle_count,
 | 
			
		||||
                                  Kernel::Handle reply_target) {
 | 
			
		||||
    // 'handles' has to be a valid pointer even if 'handle_count' is 0.
 | 
			
		||||
    if (handles == nullptr)
 | 
			
		||||
    if (!Memory::IsValidVirtualAddress(handles_address))
 | 
			
		||||
        return Kernel::ERR_INVALID_POINTER;
 | 
			
		||||
 | 
			
		||||
    // Check if 'handle_count' is invalid
 | 
			
		||||
@ -466,7 +465,8 @@ static ResultCode ReplyAndReceive(s32* index, Kernel::Handle* handles, s32 handl
 | 
			
		||||
    std::vector<ObjectPtr> objects(handle_count);
 | 
			
		||||
 | 
			
		||||
    for (int i = 0; i < handle_count; ++i) {
 | 
			
		||||
        auto object = Kernel::g_handle_table.Get<Kernel::WaitObject>(handles[i]);
 | 
			
		||||
        Kernel::Handle handle = Memory::Read32(handles_address + i * sizeof(Kernel::Handle));
 | 
			
		||||
        auto object = Kernel::g_handle_table.Get<Kernel::WaitObject>(handle);
 | 
			
		||||
        if (object == nullptr)
 | 
			
		||||
            return ERR_INVALID_HANDLE;
 | 
			
		||||
        objects[i] = object;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user