mirror of
https://github.com/libretro/Play-.git
synced 2025-02-25 22:15:27 +00:00
Implemented strstr in IOP SYSCLIB.
This commit is contained in:
parent
394c6abf8e
commit
828a70e89a
@ -74,6 +74,9 @@ std::string CSysclib::GetFunctionName(unsigned int functionId) const
|
|||||||
case 32:
|
case 32:
|
||||||
return "strrchr";
|
return "strrchr";
|
||||||
break;
|
break;
|
||||||
|
case 34:
|
||||||
|
return "strstr";
|
||||||
|
break;
|
||||||
case 36:
|
case 36:
|
||||||
return "strtol";
|
return "strtol";
|
||||||
break;
|
break;
|
||||||
@ -196,6 +199,12 @@ void CSysclib::Invoke(CMIPS& context, unsigned int functionId)
|
|||||||
context.m_State.nGPR[CMIPS::A1].nV0
|
context.m_State.nGPR[CMIPS::A1].nV0
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
|
case 34:
|
||||||
|
context.m_State.nGPR[CMIPS::V0].nD0 = __strstr(
|
||||||
|
context.m_State.nGPR[CMIPS::A0].nV0,
|
||||||
|
context.m_State.nGPR[CMIPS::A1].nV0
|
||||||
|
);
|
||||||
|
break;
|
||||||
case 36:
|
case 36:
|
||||||
assert(context.m_State.nGPR[CMIPS::A1].nV0 == 0);
|
assert(context.m_State.nGPR[CMIPS::A1].nV0 == 0);
|
||||||
context.m_State.nGPR[CMIPS::V0].nD0 = static_cast<int32>(__strtol(
|
context.m_State.nGPR[CMIPS::V0].nD0 = static_cast<int32>(__strtol(
|
||||||
@ -326,6 +335,16 @@ uint32 CSysclib::__strrchr(uint32 strPtr, uint32 character)
|
|||||||
return strPtr + ptrDiff;
|
return strPtr + ptrDiff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32 CSysclib::__strstr(uint32 str1Ptr, uint32 str2Ptr)
|
||||||
|
{
|
||||||
|
auto str1 = reinterpret_cast<const char*>(m_ram + str1Ptr);
|
||||||
|
auto str2 = reinterpret_cast<const char*>(m_ram + str2Ptr);
|
||||||
|
auto result = strstr(str1, str2);
|
||||||
|
if(result == nullptr) return 0;
|
||||||
|
size_t ptrDiff = result - str1;
|
||||||
|
return str1Ptr + ptrDiff;
|
||||||
|
}
|
||||||
|
|
||||||
uint32 CSysclib::__strcspn(uint32 str1Ptr, uint32 str2Ptr)
|
uint32 CSysclib::__strcspn(uint32 str1Ptr, uint32 str2Ptr)
|
||||||
{
|
{
|
||||||
auto str1 = reinterpret_cast<const char*>(m_ram + str1Ptr);
|
auto str1 = reinterpret_cast<const char*>(m_ram + str1Ptr);
|
||||||
|
@ -30,6 +30,7 @@ namespace Iop
|
|||||||
void __strncpy(char*, const char*, unsigned int);
|
void __strncpy(char*, const char*, unsigned int);
|
||||||
uint32 __strchr(uint32, uint32);
|
uint32 __strchr(uint32, uint32);
|
||||||
uint32 __strrchr(uint32, uint32);
|
uint32 __strrchr(uint32, uint32);
|
||||||
|
uint32 __strstr(uint32, uint32);
|
||||||
uint32 __strcspn(uint32, uint32);
|
uint32 __strcspn(uint32, uint32);
|
||||||
uint32 __strtol(const char*, unsigned int);
|
uint32 __strtol(const char*, unsigned int);
|
||||||
uint8* m_ram;
|
uint8* m_ram;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user