diff --git a/rpcs3/Emu/Cell/Modules/cellRtc.cpp b/rpcs3/Emu/Cell/Modules/cellRtc.cpp index 73e4ff1e8d..92c5e12da2 100644 --- a/rpcs3/Emu/Cell/Modules/cellRtc.cpp +++ b/rpcs3/Emu/Cell/Modules/cellRtc.cpp @@ -488,18 +488,35 @@ error_code cellRtcFormatRfc3339LocalTime(vm::ptr pszDateTime, vm::cptr pUtc, vm::cptr pszDateTime); + /* Takes a RFC2822 / RFC3339 / asctime String, and converts it to a CellRtcTick */ error_code cellRtcParseDateTime(vm::ptr pUtc, vm::cptr pszDateTime) { - cellRtc.error("cellRtcParseDateTime(pUtc=*0x%x, pszDateTime=%s) -- Implement me", pUtc, pszDateTime); + cellRtc.todo("cellRtcParseDateTime(pUtc=*0x%x, pszDateTime=%s)", pUtc, pszDateTime); if (!vm::check_addr(pUtc.addr()) || !vm::check_addr(pszDateTime.addr())) { return CELL_RTC_ERROR_INVALID_POINTER; } + u32 pos = 0; + + while (pszDateTime[pos] == 32 || pszDateTime[pos] == 9) + { + pos++; + } + + if (std::isdigit(pszDateTime[pos]) && + std::isdigit(pszDateTime[pos + 1]) && + std::isdigit(pszDateTime[pos + 2]) && + std::isdigit(pszDateTime[pos + 3])) + { + return cellRtcParseRfc3339(pUtc, pszDateTime + pos); + } + // Below code kinda works /*