mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	SVC: Replace GetPointer usage with ReadCString in ConnectToPort.
This commit is contained in:
		
							parent
							
								
									3c0113632d
								
							
						
					
					
						commit
						7b09b30ef1
					
				
					 2 changed files with 9 additions and 20 deletions
				
			
		|  | @ -151,21 +151,6 @@ void Wrap() { | ||||||
|     FuncReturn(func(PARAM(0)).raw); |     FuncReturn(func(PARAM(0)).raw); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| template <ResultCode func(s64*, u32, u32*, u32)> |  | ||||||
| void Wrap() { |  | ||||||
|     FuncReturn(func((s64*)Memory::GetPointer(PARAM(0)), PARAM(1), |  | ||||||
|                     (u32*)Memory::GetPointer(PARAM(2)), (s32)PARAM(3)) |  | ||||||
|                    .raw); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| template <ResultCode func(u32*, const char*)> |  | ||||||
| void Wrap() { |  | ||||||
|     u32 param_1 = 0; |  | ||||||
|     u32 retval = func(¶m_1, (char*)Memory::GetPointer(PARAM(1))).raw; |  | ||||||
|     Core::CPU().SetReg(1, param_1); |  | ||||||
|     FuncReturn(retval); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| template <ResultCode func(u32*, s32, s32)> | template <ResultCode func(u32*, s32, s32)> | ||||||
| void Wrap() { | void Wrap() { | ||||||
|     u32 param_1 = 0; |     u32 param_1 = 0; | ||||||
|  |  | ||||||
|  | @ -201,17 +201,21 @@ static ResultCode UnmapMemoryBlock(Kernel::Handle handle, u32 addr) { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /// Connect to an OS service given the port name, returns the handle to the port to out
 | /// Connect to an OS service given the port name, returns the handle to the port to out
 | ||||||
| static ResultCode ConnectToPort(Kernel::Handle* out_handle, const char* port_name) { | static ResultCode ConnectToPort(Kernel::Handle* out_handle, VAddr port_name_address) { | ||||||
|     if (port_name == nullptr) |     if (!Memory::IsValidVirtualAddress(port_name_address)) | ||||||
|         return Kernel::ERR_NOT_FOUND; |         return Kernel::ERR_NOT_FOUND; | ||||||
|     if (std::strlen(port_name) > 11) | 
 | ||||||
|  |     static constexpr std::size_t PortNameMaxLength = 11; | ||||||
|  |     // Read 1 char beyond the max allowed port name to detect names that are too long.
 | ||||||
|  |     std::string port_name = Memory::ReadCString(port_name_address, PortNameMaxLength + 1); | ||||||
|  |     if (port_name.size() > PortNameMaxLength) | ||||||
|         return Kernel::ERR_PORT_NAME_TOO_LONG; |         return Kernel::ERR_PORT_NAME_TOO_LONG; | ||||||
| 
 | 
 | ||||||
|     LOG_TRACE(Kernel_SVC, "called port_name=%s", port_name); |     LOG_TRACE(Kernel_SVC, "called port_name=%s", port_name.c_str()); | ||||||
| 
 | 
 | ||||||
|     auto it = Service::g_kernel_named_ports.find(port_name); |     auto it = Service::g_kernel_named_ports.find(port_name); | ||||||
|     if (it == Service::g_kernel_named_ports.end()) { |     if (it == Service::g_kernel_named_ports.end()) { | ||||||
|         LOG_WARNING(Kernel_SVC, "tried to connect to unknown port: %s", port_name); |         LOG_WARNING(Kernel_SVC, "tried to connect to unknown port: %s", port_name.c_str()); | ||||||
|         return Kernel::ERR_NOT_FOUND; |         return Kernel::ERR_NOT_FOUND; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue