service: time: Implement ToPosixTimeWithMyRule.
- Used by Pokemon Mystery Dungeon.
This commit is contained in:
		| @@ -1019,6 +1019,15 @@ ResultCode TimeZoneManager::ToPosixTime(const TimeZoneRule& rules, | ||||
|     return RESULT_SUCCESS; | ||||
| } | ||||
|  | ||||
| ResultCode TimeZoneManager::ToPosixTimeWithMyRule(const CalendarTime& calendar_time, | ||||
|                                                   s64& posix_time) const { | ||||
|     if (is_initialized) { | ||||
|         return ToPosixTime(time_zone_rule, calendar_time, posix_time); | ||||
|     } | ||||
|     posix_time = 0; | ||||
|     return ERROR_UNINITIALIZED_CLOCK; | ||||
| } | ||||
|  | ||||
| ResultCode TimeZoneManager::GetDeviceLocationName(LocationName& value) const { | ||||
|     if (!is_initialized) { | ||||
|         return ERROR_UNINITIALIZED_CLOCK; | ||||
|   | ||||
| @@ -39,6 +39,7 @@ public: | ||||
|     ResultCode ParseTimeZoneRuleBinary(TimeZoneRule& rules, FileSys::VirtualFile& vfs_file) const; | ||||
|     ResultCode ToPosixTime(const TimeZoneRule& rules, const CalendarTime& calendar_time, | ||||
|                            s64& posix_time) const; | ||||
|     ResultCode ToPosixTimeWithMyRule(const CalendarTime& calendar_time, s64& posix_time) const; | ||||
|  | ||||
| private: | ||||
|     bool is_initialized{}; | ||||
|   | ||||
| @@ -22,7 +22,7 @@ ITimeZoneService ::ITimeZoneService(TimeZone::TimeZoneContentManager& time_zone_ | ||||
|         {100, &ITimeZoneService::ToCalendarTime, "ToCalendarTime"}, | ||||
|         {101, &ITimeZoneService::ToCalendarTimeWithMyRule, "ToCalendarTimeWithMyRule"}, | ||||
|         {201, &ITimeZoneService::ToPosixTime, "ToPosixTime"}, | ||||
|         {202, nullptr, "ToPosixTimeWithMyRule"}, | ||||
|         {202, &ITimeZoneService::ToPosixTimeWithMyRule, "ToPosixTimeWithMyRule"}, | ||||
|     }; | ||||
|     RegisterHandlers(functions); | ||||
| } | ||||
| @@ -145,4 +145,26 @@ void ITimeZoneService::ToPosixTime(Kernel::HLERequestContext& ctx) { | ||||
|     ctx.WriteBuffer(&posix_time, sizeof(s64)); | ||||
| } | ||||
|  | ||||
| void ITimeZoneService::ToPosixTimeWithMyRule(Kernel::HLERequestContext& ctx) { | ||||
|     LOG_DEBUG(Service_Time, "called"); | ||||
|  | ||||
|     IPC::RequestParser rp{ctx}; | ||||
|     const auto calendar_time{rp.PopRaw<TimeZone::CalendarTime>()}; | ||||
|  | ||||
|     s64 posix_time{}; | ||||
|     if (const ResultCode result{ | ||||
|             time_zone_content_manager.GetTimeZoneManager().ToPosixTimeWithMyRule(calendar_time, | ||||
|                                                                                  posix_time)}; | ||||
|         result != RESULT_SUCCESS) { | ||||
|         IPC::ResponseBuilder rb{ctx, 2}; | ||||
|         rb.Push(result); | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|     IPC::ResponseBuilder rb{ctx, 3}; | ||||
|     rb.Push(RESULT_SUCCESS); | ||||
|     rb.PushRaw<u32>(1); // Number of times we're returning | ||||
|     ctx.WriteBuffer(&posix_time, sizeof(s64)); | ||||
| } | ||||
|  | ||||
| } // namespace Service::Time | ||||
|   | ||||
| @@ -22,6 +22,7 @@ private: | ||||
|     void ToCalendarTime(Kernel::HLERequestContext& ctx); | ||||
|     void ToCalendarTimeWithMyRule(Kernel::HLERequestContext& ctx); | ||||
|     void ToPosixTime(Kernel::HLERequestContext& ctx); | ||||
|     void ToPosixTimeWithMyRule(Kernel::HLERequestContext& ctx); | ||||
|  | ||||
| private: | ||||
|     TimeZone::TimeZoneContentManager& time_zone_content_manager; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 bunnei
					bunnei