mirror of
https://github.com/Lime3DS/Lime3DS
synced 2024-10-31 20:27:52 +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…
Reference in a new issue