mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-10-31 16:09:03 -05:00 
			
		
		
		
	Merge pull request #3091 from lioncash/core-conversion
core: Make most implicit type conversion warnings errors on MSVC
This commit is contained in:
		| @@ -35,12 +35,12 @@ void GlobalScheduler::RemoveThread(const Thread* thread) { | ||||
|                       thread_list.end()); | ||||
| } | ||||
|  | ||||
| void GlobalScheduler::UnloadThread(s32 core) { | ||||
| void GlobalScheduler::UnloadThread(std::size_t core) { | ||||
|     Scheduler& sched = system.Scheduler(core); | ||||
|     sched.UnloadThread(); | ||||
| } | ||||
|  | ||||
| void GlobalScheduler::SelectThread(u32 core) { | ||||
| void GlobalScheduler::SelectThread(std::size_t core) { | ||||
|     const auto update_thread = [](Thread* thread, Scheduler& sched) { | ||||
|         if (thread != sched.selected_thread) { | ||||
|             if (thread == nullptr) { | ||||
| @@ -77,9 +77,9 @@ void GlobalScheduler::SelectThread(u32 core) { | ||||
|     // if we got a suggested thread, select it, else do a second pass. | ||||
|     if (winner && winner->GetPriority() > 2) { | ||||
|         if (winner->IsRunning()) { | ||||
|             UnloadThread(winner->GetProcessorID()); | ||||
|             UnloadThread(static_cast<u32>(winner->GetProcessorID())); | ||||
|         } | ||||
|         TransferToCore(winner->GetPriority(), core, winner); | ||||
|         TransferToCore(winner->GetPriority(), static_cast<s32>(core), winner); | ||||
|         update_thread(winner, sched); | ||||
|         return; | ||||
|     } | ||||
| @@ -91,9 +91,9 @@ void GlobalScheduler::SelectThread(u32 core) { | ||||
|             Thread* thread_on_core = scheduled_queue[src_core].front(); | ||||
|             Thread* to_change = *it; | ||||
|             if (thread_on_core->IsRunning() || to_change->IsRunning()) { | ||||
|                 UnloadThread(src_core); | ||||
|                 UnloadThread(static_cast<u32>(src_core)); | ||||
|             } | ||||
|             TransferToCore(thread_on_core->GetPriority(), core, thread_on_core); | ||||
|             TransferToCore(thread_on_core->GetPriority(), static_cast<s32>(core), thread_on_core); | ||||
|             current_thread = thread_on_core; | ||||
|             break; | ||||
|         } | ||||
| @@ -154,9 +154,9 @@ bool GlobalScheduler::YieldThreadAndBalanceLoad(Thread* yielding_thread) { | ||||
|     if (winner != nullptr) { | ||||
|         if (winner != yielding_thread) { | ||||
|             if (winner->IsRunning()) { | ||||
|                 UnloadThread(winner->GetProcessorID()); | ||||
|                 UnloadThread(static_cast<u32>(winner->GetProcessorID())); | ||||
|             } | ||||
|             TransferToCore(winner->GetPriority(), core_id, winner); | ||||
|             TransferToCore(winner->GetPriority(), s32(core_id), winner); | ||||
|         } | ||||
|     } else { | ||||
|         winner = next_thread; | ||||
| @@ -196,9 +196,9 @@ bool GlobalScheduler::YieldThreadAndWaitForLoadBalancing(Thread* yielding_thread | ||||
|         if (winner != nullptr) { | ||||
|             if (winner != yielding_thread) { | ||||
|                 if (winner->IsRunning()) { | ||||
|                     UnloadThread(winner->GetProcessorID()); | ||||
|                     UnloadThread(static_cast<u32>(winner->GetProcessorID())); | ||||
|                 } | ||||
|                 TransferToCore(winner->GetPriority(), core_id, winner); | ||||
|                 TransferToCore(winner->GetPriority(), static_cast<s32>(core_id), winner); | ||||
|             } | ||||
|         } else { | ||||
|             winner = yielding_thread; | ||||
| @@ -248,7 +248,7 @@ void GlobalScheduler::PreemptThreads() { | ||||
|  | ||||
|         if (winner != nullptr) { | ||||
|             if (winner->IsRunning()) { | ||||
|                 UnloadThread(winner->GetProcessorID()); | ||||
|                 UnloadThread(static_cast<u32>(winner->GetProcessorID())); | ||||
|             } | ||||
|             TransferToCore(winner->GetPriority(), s32(core_id), winner); | ||||
|             current_thread = | ||||
| @@ -281,7 +281,7 @@ void GlobalScheduler::PreemptThreads() { | ||||
|  | ||||
|             if (winner != nullptr) { | ||||
|                 if (winner->IsRunning()) { | ||||
|                     UnloadThread(winner->GetProcessorID()); | ||||
|                     UnloadThread(static_cast<u32>(winner->GetProcessorID())); | ||||
|                 } | ||||
|                 TransferToCore(winner->GetPriority(), s32(core_id), winner); | ||||
|                 current_thread = winner; | ||||
| @@ -292,30 +292,30 @@ void GlobalScheduler::PreemptThreads() { | ||||
|     } | ||||
| } | ||||
|  | ||||
| void GlobalScheduler::Suggest(u32 priority, u32 core, Thread* thread) { | ||||
| void GlobalScheduler::Suggest(u32 priority, std::size_t core, Thread* thread) { | ||||
|     suggested_queue[core].add(thread, priority); | ||||
| } | ||||
|  | ||||
| void GlobalScheduler::Unsuggest(u32 priority, u32 core, Thread* thread) { | ||||
| void GlobalScheduler::Unsuggest(u32 priority, std::size_t core, Thread* thread) { | ||||
|     suggested_queue[core].remove(thread, priority); | ||||
| } | ||||
|  | ||||
| void GlobalScheduler::Schedule(u32 priority, u32 core, Thread* thread) { | ||||
| void GlobalScheduler::Schedule(u32 priority, std::size_t core, Thread* thread) { | ||||
|     ASSERT_MSG(thread->GetProcessorID() == s32(core), "Thread must be assigned to this core."); | ||||
|     scheduled_queue[core].add(thread, priority); | ||||
| } | ||||
|  | ||||
| void GlobalScheduler::SchedulePrepend(u32 priority, u32 core, Thread* thread) { | ||||
| void GlobalScheduler::SchedulePrepend(u32 priority, std::size_t core, Thread* thread) { | ||||
|     ASSERT_MSG(thread->GetProcessorID() == s32(core), "Thread must be assigned to this core."); | ||||
|     scheduled_queue[core].add(thread, priority, false); | ||||
| } | ||||
|  | ||||
| void GlobalScheduler::Reschedule(u32 priority, u32 core, Thread* thread) { | ||||
| void GlobalScheduler::Reschedule(u32 priority, std::size_t core, Thread* thread) { | ||||
|     scheduled_queue[core].remove(thread, priority); | ||||
|     scheduled_queue[core].add(thread, priority); | ||||
| } | ||||
|  | ||||
| void GlobalScheduler::Unschedule(u32 priority, u32 core, Thread* thread) { | ||||
| void GlobalScheduler::Unschedule(u32 priority, std::size_t core, Thread* thread) { | ||||
|     scheduled_queue[core].remove(thread, priority); | ||||
| } | ||||
|  | ||||
| @@ -327,14 +327,14 @@ void GlobalScheduler::TransferToCore(u32 priority, s32 destination_core, Thread* | ||||
|     } | ||||
|     thread->SetProcessorID(destination_core); | ||||
|     if (source_core >= 0) { | ||||
|         Unschedule(priority, source_core, thread); | ||||
|         Unschedule(priority, static_cast<u32>(source_core), thread); | ||||
|     } | ||||
|     if (destination_core >= 0) { | ||||
|         Unsuggest(priority, destination_core, thread); | ||||
|         Schedule(priority, destination_core, thread); | ||||
|         Unsuggest(priority, static_cast<u32>(destination_core), thread); | ||||
|         Schedule(priority, static_cast<u32>(destination_core), thread); | ||||
|     } | ||||
|     if (source_core >= 0) { | ||||
|         Suggest(priority, source_core, thread); | ||||
|         Suggest(priority, static_cast<u32>(source_core), thread); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -357,7 +357,7 @@ void GlobalScheduler::Shutdown() { | ||||
|     thread_list.clear(); | ||||
| } | ||||
|  | ||||
| Scheduler::Scheduler(Core::System& system, Core::ARM_Interface& cpu_core, u32 core_id) | ||||
| Scheduler::Scheduler(Core::System& system, Core::ARM_Interface& cpu_core, std::size_t core_id) | ||||
|     : system(system), cpu_core(cpu_core), core_id(core_id) {} | ||||
|  | ||||
| Scheduler::~Scheduler() = default; | ||||
|   | ||||
| @@ -42,41 +42,34 @@ public: | ||||
|      * Add a thread to the suggested queue of a cpu core. Suggested threads may be | ||||
|      * picked if no thread is scheduled to run on the core. | ||||
|      */ | ||||
|     void Suggest(u32 priority, u32 core, Thread* thread); | ||||
|     void Suggest(u32 priority, std::size_t core, Thread* thread); | ||||
|  | ||||
|     /** | ||||
|      * Remove a thread to the suggested queue of a cpu core. Suggested threads may be | ||||
|      * picked if no thread is scheduled to run on the core. | ||||
|      */ | ||||
|     void Unsuggest(u32 priority, u32 core, Thread* thread); | ||||
|     void Unsuggest(u32 priority, std::size_t core, Thread* thread); | ||||
|  | ||||
|     /** | ||||
|      * Add a thread to the scheduling queue of a cpu core. The thread is added at the | ||||
|      * back the queue in its priority level. | ||||
|      */ | ||||
|     void Schedule(u32 priority, u32 core, Thread* thread); | ||||
|     void Schedule(u32 priority, std::size_t core, Thread* thread); | ||||
|  | ||||
|     /** | ||||
|      * Add a thread to the scheduling queue of a cpu core. The thread is added at the | ||||
|      * front the queue in its priority level. | ||||
|      */ | ||||
|     void SchedulePrepend(u32 priority, u32 core, Thread* thread); | ||||
|     void SchedulePrepend(u32 priority, std::size_t core, Thread* thread); | ||||
|  | ||||
|     /// Reschedule an already scheduled thread based on a new priority | ||||
|     void Reschedule(u32 priority, u32 core, Thread* thread); | ||||
|     void Reschedule(u32 priority, std::size_t core, Thread* thread); | ||||
|  | ||||
|     /// Unschedules a thread. | ||||
|     void Unschedule(u32 priority, u32 core, Thread* thread); | ||||
|  | ||||
|     /** | ||||
|      * Transfers a thread into an specific core. If the destination_core is -1 | ||||
|      * it will be unscheduled from its source code and added into its suggested | ||||
|      * queue. | ||||
|      */ | ||||
|     void TransferToCore(u32 priority, s32 destination_core, Thread* thread); | ||||
|     void Unschedule(u32 priority, std::size_t core, Thread* thread); | ||||
|  | ||||
|     /// Selects a core and forces it to unload its current thread's context | ||||
|     void UnloadThread(s32 core); | ||||
|     void UnloadThread(std::size_t core); | ||||
|  | ||||
|     /** | ||||
|      * Takes care of selecting the new scheduled thread in three steps: | ||||
| @@ -90,9 +83,9 @@ public: | ||||
|      * 3. Third is no suggested thread is found, we do a second pass and pick a running | ||||
|      *    thread in another core and swap it with its current thread. | ||||
|      */ | ||||
|     void SelectThread(u32 core); | ||||
|     void SelectThread(std::size_t core); | ||||
|  | ||||
|     bool HaveReadyThreads(u32 core_id) const { | ||||
|     bool HaveReadyThreads(std::size_t core_id) const { | ||||
|         return !scheduled_queue[core_id].empty(); | ||||
|     } | ||||
|  | ||||
| @@ -145,6 +138,13 @@ public: | ||||
|     void Shutdown(); | ||||
|  | ||||
| private: | ||||
|     /** | ||||
|      * Transfers a thread into an specific core. If the destination_core is -1 | ||||
|      * it will be unscheduled from its source code and added into its suggested | ||||
|      * queue. | ||||
|      */ | ||||
|     void TransferToCore(u32 priority, s32 destination_core, Thread* thread); | ||||
|  | ||||
|     bool AskForReselectionOrMarkRedundant(Thread* current_thread, const Thread* winner); | ||||
|  | ||||
|     static constexpr u32 min_regular_priority = 2; | ||||
| @@ -163,7 +163,7 @@ private: | ||||
|  | ||||
| class Scheduler final { | ||||
| public: | ||||
|     explicit Scheduler(Core::System& system, Core::ARM_Interface& cpu_core, u32 core_id); | ||||
|     explicit Scheduler(Core::System& system, Core::ARM_Interface& cpu_core, std::size_t core_id); | ||||
|     ~Scheduler(); | ||||
|  | ||||
|     /// Returns whether there are any threads that are ready to run. | ||||
| @@ -220,7 +220,7 @@ private: | ||||
|     Core::ARM_Interface& cpu_core; | ||||
|     u64 last_context_switch_time = 0; | ||||
|     u64 idle_selection_count = 0; | ||||
|     const u32 core_id; | ||||
|     const std::size_t core_id; | ||||
|  | ||||
|     bool is_context_switch_pending = false; | ||||
| }; | ||||
|   | ||||
| @@ -77,18 +77,6 @@ void Thread::CancelWakeupTimer() { | ||||
|                                                              callback_handle); | ||||
| } | ||||
|  | ||||
| static std::optional<s32> GetNextProcessorId(u64 mask) { | ||||
|     for (s32 index = 0; index < Core::NUM_CPU_CORES; ++index) { | ||||
|         if (mask & (1ULL << index)) { | ||||
|             if (!Core::System::GetInstance().Scheduler(index).GetCurrentThread()) { | ||||
|                 // Core is enabled and not running any threads, use this one | ||||
|                 return index; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     return {}; | ||||
| } | ||||
|  | ||||
| void Thread::ResumeFromWait() { | ||||
|     ASSERT_MSG(wait_objects.empty(), "Thread is waking up while waiting for objects"); | ||||
|  | ||||
| @@ -173,7 +161,7 @@ ResultVal<SharedPtr<Thread>> Thread::Create(KernelCore& kernel, std::string name | ||||
|     if (!Memory::IsValidVirtualAddress(owner_process, entry_point)) { | ||||
|         LOG_ERROR(Kernel_SVC, "(name={}): invalid entry {:016X}", name, entry_point); | ||||
|         // TODO (bunnei): Find the correct error code to use here | ||||
|         return ResultCode(-1); | ||||
|         return RESULT_UNKNOWN; | ||||
|     } | ||||
|  | ||||
|     auto& system = Core::System::GetInstance(); | ||||
| @@ -401,7 +389,7 @@ void Thread::SetCurrentPriority(u32 new_priority) { | ||||
|  | ||||
| ResultCode Thread::SetCoreAndAffinityMask(s32 new_core, u64 new_affinity_mask) { | ||||
|     const auto HighestSetCore = [](u64 mask, u32 max_cores) { | ||||
|         for (s32 core = max_cores - 1; core >= 0; core--) { | ||||
|         for (s32 core = static_cast<s32>(max_cores - 1); core >= 0; core--) { | ||||
|             if (((mask >> core) & 1) != 0) { | ||||
|                 return core; | ||||
|             } | ||||
| @@ -425,7 +413,7 @@ ResultCode Thread::SetCoreAndAffinityMask(s32 new_core, u64 new_affinity_mask) { | ||||
|         if (old_affinity_mask != new_affinity_mask) { | ||||
|             const s32 old_core = processor_id; | ||||
|             if (processor_id >= 0 && ((affinity_mask >> processor_id) & 1) == 0) { | ||||
|                 if (ideal_core < 0) { | ||||
|                 if (static_cast<s32>(ideal_core) < 0) { | ||||
|                     processor_id = HighestSetCore(affinity_mask, GlobalScheduler::NUM_CPU_CORES); | ||||
|                 } else { | ||||
|                     processor_id = ideal_core; | ||||
| @@ -447,23 +435,23 @@ void Thread::AdjustSchedulingOnStatus(u32 old_flags) { | ||||
|         ThreadSchedStatus::Runnable) { | ||||
|         // In this case the thread was running, now it's pausing/exitting | ||||
|         if (processor_id >= 0) { | ||||
|             scheduler.Unschedule(current_priority, processor_id, this); | ||||
|             scheduler.Unschedule(current_priority, static_cast<u32>(processor_id), this); | ||||
|         } | ||||
|  | ||||
|         for (s32 core = 0; core < GlobalScheduler::NUM_CPU_CORES; core++) { | ||||
|             if (core != processor_id && ((affinity_mask >> core) & 1) != 0) { | ||||
|                 scheduler.Unsuggest(current_priority, static_cast<u32>(core), this); | ||||
|         for (u32 core = 0; core < GlobalScheduler::NUM_CPU_CORES; core++) { | ||||
|             if (core != static_cast<u32>(processor_id) && ((affinity_mask >> core) & 1) != 0) { | ||||
|                 scheduler.Unsuggest(current_priority, core, this); | ||||
|             } | ||||
|         } | ||||
|     } else if (GetSchedulingStatus() == ThreadSchedStatus::Runnable) { | ||||
|         // The thread is now set to running from being stopped | ||||
|         if (processor_id >= 0) { | ||||
|             scheduler.Schedule(current_priority, processor_id, this); | ||||
|             scheduler.Schedule(current_priority, static_cast<u32>(processor_id), this); | ||||
|         } | ||||
|  | ||||
|         for (s32 core = 0; core < GlobalScheduler::NUM_CPU_CORES; core++) { | ||||
|             if (core != processor_id && ((affinity_mask >> core) & 1) != 0) { | ||||
|                 scheduler.Suggest(current_priority, static_cast<u32>(core), this); | ||||
|         for (u32 core = 0; core < GlobalScheduler::NUM_CPU_CORES; core++) { | ||||
|             if (core != static_cast<u32>(processor_id) && ((affinity_mask >> core) & 1) != 0) { | ||||
|                 scheduler.Suggest(current_priority, core, this); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| @@ -477,11 +465,11 @@ void Thread::AdjustSchedulingOnPriority(u32 old_priority) { | ||||
|     } | ||||
|     auto& scheduler = Core::System::GetInstance().GlobalScheduler(); | ||||
|     if (processor_id >= 0) { | ||||
|         scheduler.Unschedule(old_priority, processor_id, this); | ||||
|         scheduler.Unschedule(old_priority, static_cast<u32>(processor_id), this); | ||||
|     } | ||||
|  | ||||
|     for (u32 core = 0; core < GlobalScheduler::NUM_CPU_CORES; core++) { | ||||
|         if (core != processor_id && ((affinity_mask >> core) & 1) != 0) { | ||||
|         if (core != static_cast<u32>(processor_id) && ((affinity_mask >> core) & 1) != 0) { | ||||
|             scheduler.Unsuggest(old_priority, core, this); | ||||
|         } | ||||
|     } | ||||
| @@ -491,14 +479,14 @@ void Thread::AdjustSchedulingOnPriority(u32 old_priority) { | ||||
|  | ||||
|     if (processor_id >= 0) { | ||||
|         if (current_thread == this) { | ||||
|             scheduler.SchedulePrepend(current_priority, processor_id, this); | ||||
|             scheduler.SchedulePrepend(current_priority, static_cast<u32>(processor_id), this); | ||||
|         } else { | ||||
|             scheduler.Schedule(current_priority, processor_id, this); | ||||
|             scheduler.Schedule(current_priority, static_cast<u32>(processor_id), this); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     for (u32 core = 0; core < GlobalScheduler::NUM_CPU_CORES; core++) { | ||||
|         if (core != processor_id && ((affinity_mask >> core) & 1) != 0) { | ||||
|         if (core != static_cast<u32>(processor_id) && ((affinity_mask >> core) & 1) != 0) { | ||||
|             scheduler.Suggest(current_priority, core, this); | ||||
|         } | ||||
|     } | ||||
| @@ -515,7 +503,7 @@ void Thread::AdjustSchedulingOnAffinity(u64 old_affinity_mask, s32 old_core) { | ||||
|  | ||||
|     for (u32 core = 0; core < GlobalScheduler::NUM_CPU_CORES; core++) { | ||||
|         if (((old_affinity_mask >> core) & 1) != 0) { | ||||
|             if (core == old_core) { | ||||
|             if (core == static_cast<u32>(old_core)) { | ||||
|                 scheduler.Unschedule(current_priority, core, this); | ||||
|             } else { | ||||
|                 scheduler.Unsuggest(current_priority, core, this); | ||||
| @@ -525,7 +513,7 @@ void Thread::AdjustSchedulingOnAffinity(u64 old_affinity_mask, s32 old_core) { | ||||
|  | ||||
|     for (u32 core = 0; core < GlobalScheduler::NUM_CPU_CORES; core++) { | ||||
|         if (((affinity_mask >> core) & 1) != 0) { | ||||
|             if (core == processor_id) { | ||||
|             if (core == static_cast<u32>(processor_id)) { | ||||
|                 scheduler.Schedule(current_priority, core, this); | ||||
|             } else { | ||||
|                 scheduler.Suggest(current_priority, core, this); | ||||
|   | ||||
| @@ -167,7 +167,7 @@ ResultVal<VAddr> VMManager::FindFreeRegion(VAddr begin, VAddr end, u64 size) con | ||||
|  | ||||
|     if (vma_handle == vma_map.cend()) { | ||||
|         // TODO(Subv): Find the correct error code here. | ||||
|         return ResultCode(-1); | ||||
|         return RESULT_UNKNOWN; | ||||
|     } | ||||
|  | ||||
|     const VAddr target = std::max(begin, vma_handle->second.base); | ||||
|   | ||||
| @@ -146,6 +146,14 @@ constexpr bool operator!=(const ResultCode& a, const ResultCode& b) { | ||||
| /// The default success `ResultCode`. | ||||
| constexpr ResultCode RESULT_SUCCESS(0); | ||||
|  | ||||
| /** | ||||
|  * Placeholder result code used for unknown error codes. | ||||
|  * | ||||
|  * @note This should only be used when a particular error code | ||||
|  *       is not known yet. | ||||
|  */ | ||||
| constexpr ResultCode RESULT_UNKNOWN(UINT32_MAX); | ||||
|  | ||||
| /** | ||||
|  * This is an optional value type. It holds a `ResultCode` and, if that code is a success code, | ||||
|  * also holds a result of type `T`. If the code is an error code then trying to access the inner | ||||
| @@ -183,7 +191,7 @@ class ResultVal { | ||||
| public: | ||||
|     /// Constructs an empty `ResultVal` with the given error code. The code must not be a success | ||||
|     /// code. | ||||
|     ResultVal(ResultCode error_code = ResultCode(-1)) : result_code(error_code) { | ||||
|     ResultVal(ResultCode error_code = RESULT_UNKNOWN) : result_code(error_code) { | ||||
|         ASSERT(error_code.IsError()); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -84,7 +84,7 @@ protected: | ||||
|             LOG_ERROR(Service_ACC, "Failed to get profile base and data for user={}", | ||||
|                       user_id.Format()); | ||||
|             IPC::ResponseBuilder rb{ctx, 2}; | ||||
|             rb.Push(ResultCode(-1)); // TODO(ogniK): Get actual error code | ||||
|             rb.Push(RESULT_UNKNOWN); // TODO(ogniK): Get actual error code | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -98,7 +98,7 @@ protected: | ||||
|         } else { | ||||
|             LOG_ERROR(Service_ACC, "Failed to get profile base for user={}", user_id.Format()); | ||||
|             IPC::ResponseBuilder rb{ctx, 2}; | ||||
|             rb.Push(ResultCode(-1)); // TODO(ogniK): Get actual error code | ||||
|             rb.Push(RESULT_UNKNOWN); // TODO(ogniK): Get actual error code | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -442,7 +442,7 @@ void Module::Interface::TrySelectUserWithoutInteraction(Kernel::HLERequestContex | ||||
|     const auto user_list = profile_manager->GetAllUsers(); | ||||
|     if (std::all_of(user_list.begin(), user_list.end(), | ||||
|                     [](const auto& user) { return user.uuid == Common::INVALID_UUID; })) { | ||||
|         rb.Push(ResultCode(-1)); // TODO(ogniK): Find the correct error code | ||||
|         rb.Push(RESULT_UNKNOWN); // TODO(ogniK): Find the correct error code | ||||
|         rb.PushRaw<u128>(Common::INVALID_UUID); | ||||
|         return; | ||||
|     } | ||||
|   | ||||
| @@ -31,8 +31,8 @@ struct ProfileDataRaw { | ||||
| static_assert(sizeof(ProfileDataRaw) == 0x650, "ProfileDataRaw has incorrect size."); | ||||
|  | ||||
| // TODO(ogniK): Get actual error codes | ||||
| constexpr ResultCode ERROR_TOO_MANY_USERS(ErrorModule::Account, -1); | ||||
| constexpr ResultCode ERROR_USER_ALREADY_EXISTS(ErrorModule::Account, -2); | ||||
| constexpr ResultCode ERROR_TOO_MANY_USERS(ErrorModule::Account, u32(-1)); | ||||
| constexpr ResultCode ERROR_USER_ALREADY_EXISTS(ErrorModule::Account, u32(-2)); | ||||
| constexpr ResultCode ERROR_ARGUMENT_IS_NULL(ErrorModule::Account, 20); | ||||
|  | ||||
| constexpr char ACC_SAVE_AVATORS_BASE_PATH[] = "/system/save/8000000000000010/su/avators/"; | ||||
|   | ||||
| @@ -991,7 +991,7 @@ void ILibraryAppletCreator::CreateLibraryApplet(Kernel::HLERequestContext& ctx) | ||||
|         LOG_ERROR(Service_AM, "Applet doesn't exist! applet_id={}", static_cast<u32>(applet_id)); | ||||
|  | ||||
|         IPC::ResponseBuilder rb{ctx, 2}; | ||||
|         rb.Push(ResultCode(-1)); | ||||
|         rb.Push(RESULT_UNKNOWN); | ||||
|         return; | ||||
|     } | ||||
|  | ||||
| @@ -1027,7 +1027,7 @@ void ILibraryAppletCreator::CreateTransferMemoryStorage(Kernel::HLERequestContex | ||||
|     if (transfer_mem == nullptr) { | ||||
|         LOG_ERROR(Service_AM, "shared_mem is a nullpr for handle={:08X}", handle); | ||||
|         IPC::ResponseBuilder rb{ctx, 2}; | ||||
|         rb.Push(ResultCode(-1)); | ||||
|         rb.Push(RESULT_UNKNOWN); | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -337,7 +337,7 @@ void WebBrowser::ExecuteInternal() { | ||||
| void WebBrowser::InitializeShop() { | ||||
|     if (frontend_e_commerce == nullptr) { | ||||
|         LOG_ERROR(Service_AM, "Missing ECommerce Applet frontend!"); | ||||
|         status = ResultCode(-1); | ||||
|         status = RESULT_UNKNOWN; | ||||
|         return; | ||||
|     } | ||||
|  | ||||
| @@ -353,7 +353,7 @@ void WebBrowser::InitializeShop() { | ||||
|  | ||||
|     if (url == args.end()) { | ||||
|         LOG_ERROR(Service_AM, "Missing EShop Arguments URL for initialization!"); | ||||
|         status = ResultCode(-1); | ||||
|         status = RESULT_UNKNOWN; | ||||
|         return; | ||||
|     } | ||||
|  | ||||
| @@ -366,7 +366,7 @@ void WebBrowser::InitializeShop() { | ||||
|     // Less is missing info, More is malformed | ||||
|     if (split_query.size() != 2) { | ||||
|         LOG_ERROR(Service_AM, "EShop Arguments has more than one question mark, malformed"); | ||||
|         status = ResultCode(-1); | ||||
|         status = RESULT_UNKNOWN; | ||||
|         return; | ||||
|     } | ||||
|  | ||||
| @@ -390,7 +390,7 @@ void WebBrowser::InitializeShop() { | ||||
|  | ||||
|     if (scene == shop_query.end()) { | ||||
|         LOG_ERROR(Service_AM, "No scene parameter was passed via shop query!"); | ||||
|         status = ResultCode(-1); | ||||
|         status = RESULT_UNKNOWN; | ||||
|         return; | ||||
|     } | ||||
|  | ||||
| @@ -406,7 +406,7 @@ void WebBrowser::InitializeShop() { | ||||
|     const auto target = target_map.find(scene->second); | ||||
|     if (target == target_map.end()) { | ||||
|         LOG_ERROR(Service_AM, "Scene for shop query is invalid! (scene={})", scene->second); | ||||
|         status = ResultCode(-1); | ||||
|         status = RESULT_UNKNOWN; | ||||
|         return; | ||||
|     } | ||||
|  | ||||
| @@ -427,7 +427,7 @@ void WebBrowser::InitializeOffline() { | ||||
|     if (args.find(WebArgTLVType::DocumentPath) == args.end() || | ||||
|         args.find(WebArgTLVType::DocumentKind) == args.end() || | ||||
|         args.find(WebArgTLVType::ApplicationID) == args.end()) { | ||||
|         status = ResultCode(-1); | ||||
|         status = RESULT_UNKNOWN; | ||||
|         LOG_ERROR(Service_AM, "Missing necessary parameters for initialization!"); | ||||
|     } | ||||
|  | ||||
| @@ -476,7 +476,7 @@ void WebBrowser::InitializeOffline() { | ||||
|  | ||||
|     offline_romfs = GetApplicationRomFS(system, title_id, type); | ||||
|     if (offline_romfs == nullptr) { | ||||
|         status = ResultCode(-1); | ||||
|         status = RESULT_UNKNOWN; | ||||
|         LOG_ERROR(Service_AM, "Failed to find offline data for request!"); | ||||
|     } | ||||
|  | ||||
| @@ -496,7 +496,7 @@ void WebBrowser::ExecuteShop() { | ||||
|     const auto check_optional_parameter = [this](const auto& p) { | ||||
|         if (!p.has_value()) { | ||||
|             LOG_ERROR(Service_AM, "Missing one or more necessary parameters for execution!"); | ||||
|             status = ResultCode(-1); | ||||
|             status = RESULT_UNKNOWN; | ||||
|             return false; | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -131,7 +131,7 @@ void AOC_U::ListAddOnContent(Kernel::HLERequestContext& ctx) { | ||||
|     if (out.size() < offset) { | ||||
|         IPC::ResponseBuilder rb{ctx, 2}; | ||||
|         // TODO(DarkLordZach): Find the correct error code. | ||||
|         rb.Push(ResultCode(-1)); | ||||
|         rb.Push(RESULT_UNKNOWN); | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -80,7 +80,7 @@ private: | ||||
|             LOG_ERROR(Audio, "Failed to decode opus data"); | ||||
|             IPC::ResponseBuilder rb{ctx, 2}; | ||||
|             // TODO(ogniK): Use correct error code | ||||
|             rb.Push(ResultCode(-1)); | ||||
|             rb.Push(RESULT_UNKNOWN); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
| @@ -278,7 +278,7 @@ void HwOpus::OpenOpusDecoder(Kernel::HLERequestContext& ctx) { | ||||
|         LOG_ERROR(Audio, "Failed to create Opus decoder (error={}).", error); | ||||
|         IPC::ResponseBuilder rb{ctx, 2}; | ||||
|         // TODO(ogniK): Use correct error code | ||||
|         rb.Push(ResultCode(-1)); | ||||
|         rb.Push(RESULT_UNKNOWN); | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -114,7 +114,7 @@ void HandleDownloadDisplayResult(const AM::Applets::AppletManager& applet_manage | ||||
|  | ||||
|     const auto& frontend{applet_manager.GetAppletFrontendSet()}; | ||||
|     frontend.error->ShowCustomErrorText( | ||||
|         ResultCode(-1), "There was an error while attempting to use Boxcat.", | ||||
|         RESULT_UNKNOWN, "There was an error while attempting to use Boxcat.", | ||||
|         DOWNLOAD_RESULT_LOG_MESSAGES[static_cast<std::size_t>(res)], [] {}); | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -58,11 +58,11 @@ ResultCode VfsDirectoryServiceWrapper::CreateFile(const std::string& path_, u64 | ||||
|     auto file = dir->CreateFile(FileUtil::GetFilename(path)); | ||||
|     if (file == nullptr) { | ||||
|         // TODO(DarkLordZach): Find a better error code for this | ||||
|         return ResultCode(-1); | ||||
|         return RESULT_UNKNOWN; | ||||
|     } | ||||
|     if (!file->Resize(size)) { | ||||
|         // TODO(DarkLordZach): Find a better error code for this | ||||
|         return ResultCode(-1); | ||||
|         return RESULT_UNKNOWN; | ||||
|     } | ||||
|     return RESULT_SUCCESS; | ||||
| } | ||||
| @@ -80,7 +80,7 @@ ResultCode VfsDirectoryServiceWrapper::DeleteFile(const std::string& path_) cons | ||||
|     } | ||||
|     if (!dir->DeleteFile(FileUtil::GetFilename(path))) { | ||||
|         // TODO(DarkLordZach): Find a better error code for this | ||||
|         return ResultCode(-1); | ||||
|         return RESULT_UNKNOWN; | ||||
|     } | ||||
|  | ||||
|     return RESULT_SUCCESS; | ||||
| @@ -94,7 +94,7 @@ ResultCode VfsDirectoryServiceWrapper::CreateDirectory(const std::string& path_) | ||||
|     auto new_dir = dir->CreateSubdirectory(FileUtil::GetFilename(path)); | ||||
|     if (new_dir == nullptr) { | ||||
|         // TODO(DarkLordZach): Find a better error code for this | ||||
|         return ResultCode(-1); | ||||
|         return RESULT_UNKNOWN; | ||||
|     } | ||||
|     return RESULT_SUCCESS; | ||||
| } | ||||
| @@ -104,7 +104,7 @@ ResultCode VfsDirectoryServiceWrapper::DeleteDirectory(const std::string& path_) | ||||
|     auto dir = GetDirectoryRelativeWrapped(backing, FileUtil::GetParentPath(path)); | ||||
|     if (!dir->DeleteSubdirectory(FileUtil::GetFilename(path))) { | ||||
|         // TODO(DarkLordZach): Find a better error code for this | ||||
|         return ResultCode(-1); | ||||
|         return RESULT_UNKNOWN; | ||||
|     } | ||||
|     return RESULT_SUCCESS; | ||||
| } | ||||
| @@ -114,7 +114,7 @@ ResultCode VfsDirectoryServiceWrapper::DeleteDirectoryRecursively(const std::str | ||||
|     auto dir = GetDirectoryRelativeWrapped(backing, FileUtil::GetParentPath(path)); | ||||
|     if (!dir->DeleteSubdirectoryRecursive(FileUtil::GetFilename(path))) { | ||||
|         // TODO(DarkLordZach): Find a better error code for this | ||||
|         return ResultCode(-1); | ||||
|         return RESULT_UNKNOWN; | ||||
|     } | ||||
|     return RESULT_SUCCESS; | ||||
| } | ||||
| @@ -125,7 +125,7 @@ ResultCode VfsDirectoryServiceWrapper::CleanDirectoryRecursively(const std::stri | ||||
|  | ||||
|     if (!dir->CleanSubdirectoryRecursive(FileUtil::GetFilename(sanitized_path))) { | ||||
|         // TODO(DarkLordZach): Find a better error code for this | ||||
|         return ResultCode(-1); | ||||
|         return RESULT_UNKNOWN; | ||||
|     } | ||||
|  | ||||
|     return RESULT_SUCCESS; | ||||
| @@ -142,7 +142,7 @@ ResultCode VfsDirectoryServiceWrapper::RenameFile(const std::string& src_path_, | ||||
|             return FileSys::ERROR_PATH_NOT_FOUND; | ||||
|         if (!src->Rename(FileUtil::GetFilename(dest_path))) { | ||||
|             // TODO(DarkLordZach): Find a better error code for this | ||||
|             return ResultCode(-1); | ||||
|             return RESULT_UNKNOWN; | ||||
|         } | ||||
|         return RESULT_SUCCESS; | ||||
|     } | ||||
| @@ -160,7 +160,7 @@ ResultCode VfsDirectoryServiceWrapper::RenameFile(const std::string& src_path_, | ||||
|  | ||||
|     if (!src->GetContainingDirectory()->DeleteFile(FileUtil::GetFilename(src_path))) { | ||||
|         // TODO(DarkLordZach): Find a better error code for this | ||||
|         return ResultCode(-1); | ||||
|         return RESULT_UNKNOWN; | ||||
|     } | ||||
|  | ||||
|     return RESULT_SUCCESS; | ||||
| @@ -177,7 +177,7 @@ ResultCode VfsDirectoryServiceWrapper::RenameDirectory(const std::string& src_pa | ||||
|             return FileSys::ERROR_PATH_NOT_FOUND; | ||||
|         if (!src->Rename(FileUtil::GetFilename(dest_path))) { | ||||
|             // TODO(DarkLordZach): Find a better error code for this | ||||
|             return ResultCode(-1); | ||||
|             return RESULT_UNKNOWN; | ||||
|         } | ||||
|         return RESULT_SUCCESS; | ||||
|     } | ||||
| @@ -189,7 +189,7 @@ ResultCode VfsDirectoryServiceWrapper::RenameDirectory(const std::string& src_pa | ||||
|                src_path, dest_path); | ||||
|  | ||||
|     // TODO(DarkLordZach): Find a better error code for this | ||||
|     return ResultCode(-1); | ||||
|     return RESULT_UNKNOWN; | ||||
| } | ||||
|  | ||||
| ResultVal<FileSys::VirtualFile> VfsDirectoryServiceWrapper::OpenFile(const std::string& path_, | ||||
| @@ -287,7 +287,7 @@ ResultVal<FileSys::VirtualFile> FileSystemController::OpenRomFSCurrentProcess() | ||||
|  | ||||
|     if (romfs_factory == nullptr) { | ||||
|         // TODO(bunnei): Find a better error code for this | ||||
|         return ResultCode(-1); | ||||
|         return RESULT_UNKNOWN; | ||||
|     } | ||||
|  | ||||
|     return romfs_factory->OpenCurrentProcess(system.CurrentProcess()->GetTitleID()); | ||||
| @@ -300,7 +300,7 @@ ResultVal<FileSys::VirtualFile> FileSystemController::OpenRomFS( | ||||
|  | ||||
|     if (romfs_factory == nullptr) { | ||||
|         // TODO(bunnei): Find a better error code for this | ||||
|         return ResultCode(-1); | ||||
|         return RESULT_UNKNOWN; | ||||
|     } | ||||
|  | ||||
|     return romfs_factory->Open(title_id, storage_id, type); | ||||
|   | ||||
| @@ -785,7 +785,7 @@ void FSP_SRV::OpenFileSystemWithPatch(Kernel::HLERequestContext& ctx) { | ||||
|                 static_cast<u8>(type), title_id); | ||||
|  | ||||
|     IPC::ResponseBuilder rb{ctx, 2, 0, 0}; | ||||
|     rb.Push(ResultCode(-1)); | ||||
|     rb.Push(RESULT_UNKNOWN); | ||||
| } | ||||
|  | ||||
| void FSP_SRV::OpenSdCardFileSystem(Kernel::HLERequestContext& ctx) { | ||||
| @@ -891,7 +891,7 @@ void FSP_SRV::OpenDataStorageByCurrentProcess(Kernel::HLERequestContext& ctx) { | ||||
|         // TODO (bunnei): Find the right error code to use here | ||||
|         LOG_CRITICAL(Service_FS, "no file system interface available!"); | ||||
|         IPC::ResponseBuilder rb{ctx, 2}; | ||||
|         rb.Push(ResultCode(-1)); | ||||
|         rb.Push(RESULT_UNKNOWN); | ||||
|         return; | ||||
|     } | ||||
|  | ||||
| @@ -928,7 +928,7 @@ void FSP_SRV::OpenDataStorageByDataId(Kernel::HLERequestContext& ctx) { | ||||
|                   "could not open data storage with title_id={:016X}, storage_id={:02X}", title_id, | ||||
|                   static_cast<u8>(storage_id)); | ||||
|         IPC::ResponseBuilder rb{ctx, 2}; | ||||
|         rb.Push(ResultCode(-1)); | ||||
|         rb.Push(RESULT_UNKNOWN); | ||||
|         return; | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -242,7 +242,7 @@ private: | ||||
|         const auto index = db.IndexOf(uuid); | ||||
|         if (index > MAX_MIIS) { | ||||
|             // TODO(DarkLordZach): Find a better error code | ||||
|             rb.Push(ResultCode(-1)); | ||||
|             rb.Push(RESULT_UNKNOWN); | ||||
|             rb.Push(index); | ||||
|         } else { | ||||
|             rb.Push(RESULT_SUCCESS); | ||||
| @@ -268,7 +268,7 @@ private: | ||||
|  | ||||
|         IPC::ResponseBuilder rb{ctx, 2}; | ||||
|         // TODO(DarkLordZach): Find a better error code | ||||
|         rb.Push(success ? RESULT_SUCCESS : ResultCode(-1)); | ||||
|         rb.Push(success ? RESULT_SUCCESS : RESULT_UNKNOWN); | ||||
|     } | ||||
|  | ||||
|     void AddOrReplace(Kernel::HLERequestContext& ctx) { | ||||
| @@ -282,7 +282,7 @@ private: | ||||
|  | ||||
|         IPC::ResponseBuilder rb{ctx, 2}; | ||||
|         // TODO(DarkLordZach): Find a better error code | ||||
|         rb.Push(success ? RESULT_SUCCESS : ResultCode(-1)); | ||||
|         rb.Push(success ? RESULT_SUCCESS : RESULT_UNKNOWN); | ||||
|     } | ||||
|  | ||||
|     void Delete(Kernel::HLERequestContext& ctx) { | ||||
|   | ||||
| @@ -16,10 +16,7 @@ | ||||
| #include "core/hle/service/nfp/nfp_user.h" | ||||
|  | ||||
| namespace Service::NFP { | ||||
|  | ||||
| namespace ErrCodes { | ||||
| [[maybe_unused]] constexpr ResultCode ERR_TAG_FAILED(ErrorModule::NFP, | ||||
|                                                      -1); // TODO(ogniK): Find the actual error code | ||||
| constexpr ResultCode ERR_NO_APPLICATION_AREA(ErrorModule::NFP, 152); | ||||
| } // namespace ErrCodes | ||||
|  | ||||
|   | ||||
| @@ -271,7 +271,7 @@ void IApplicationManagerInterface::GetApplicationControlData(Kernel::HLERequestC | ||||
|                       "output buffer is too small! (actual={:016X}, expected_min=0x4000)", size); | ||||
|             IPC::ResponseBuilder rb{ctx, 2}; | ||||
|             // TODO(DarkLordZach): Find a better error code for this. | ||||
|             rb.Push(ResultCode(-1)); | ||||
|             rb.Push(RESULT_UNKNOWN); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
| @@ -291,7 +291,7 @@ void IApplicationManagerInterface::GetApplicationControlData(Kernel::HLERequestC | ||||
|                       0x4000 + control.second->GetSize()); | ||||
|             IPC::ResponseBuilder rb{ctx, 2}; | ||||
|             // TODO(DarkLordZach): Find a better error code for this. | ||||
|             rb.Push(ResultCode(-1)); | ||||
|             rb.Push(RESULT_UNKNOWN); | ||||
|             return; | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -97,7 +97,7 @@ void EncryptSharedFont(const std::vector<u32>& input, std::vector<u8>& output, | ||||
|     const auto key = Common::swap32(EXPECTED_RESULT ^ EXPECTED_MAGIC); | ||||
|     std::vector<u32> transformed_font(input.size() + 2); | ||||
|     transformed_font[0] = Common::swap32(EXPECTED_MAGIC); | ||||
|     transformed_font[1] = Common::swap32(input.size() * sizeof(u32)) ^ key; | ||||
|     transformed_font[1] = Common::swap32(static_cast<u32>(input.size() * sizeof(u32))) ^ key; | ||||
|     std::transform(input.begin(), input.end(), transformed_font.begin() + 2, | ||||
|                    [key](u32 in) { return in ^ key; }); | ||||
|     std::memcpy(output.data() + offset, transformed_font.data(), | ||||
|   | ||||
| @@ -34,12 +34,12 @@ static void PosixToCalendar(u64 posix_time, CalendarTime& calendar_time, | ||||
|         additional_info = {}; | ||||
|         return; | ||||
|     } | ||||
|     calendar_time.year = tm->tm_year + 1900; | ||||
|     calendar_time.month = tm->tm_mon + 1; | ||||
|     calendar_time.day = tm->tm_mday; | ||||
|     calendar_time.hour = tm->tm_hour; | ||||
|     calendar_time.minute = tm->tm_min; | ||||
|     calendar_time.second = tm->tm_sec; | ||||
|     calendar_time.year = static_cast<u16_le>(tm->tm_year + 1900); | ||||
|     calendar_time.month = static_cast<u8>(tm->tm_mon + 1); | ||||
|     calendar_time.day = static_cast<u8>(tm->tm_mday); | ||||
|     calendar_time.hour = static_cast<u8>(tm->tm_hour); | ||||
|     calendar_time.minute = static_cast<u8>(tm->tm_min); | ||||
|     calendar_time.second = static_cast<u8>(tm->tm_sec); | ||||
|  | ||||
|     additional_info.day_of_week = tm->tm_wday; | ||||
|     additional_info.day_of_year = tm->tm_yday; | ||||
| @@ -322,7 +322,7 @@ void Module::Interface::GetClockSnapshot(Kernel::HLERequestContext& ctx) { | ||||
|     if (tm == nullptr) { | ||||
|         LOG_ERROR(Service_Time, "tm is a nullptr"); | ||||
|         IPC::ResponseBuilder rb{ctx, 2}; | ||||
|         rb.Push(ResultCode(-1)); // TODO(ogniK): Find appropriate error code | ||||
|         rb.Push(RESULT_UNKNOWN); // TODO(ogniK): Find appropriate error code | ||||
|         return; | ||||
|     } | ||||
|  | ||||
| @@ -331,12 +331,12 @@ void Module::Interface::GetClockSnapshot(Kernel::HLERequestContext& ctx) { | ||||
|     const SteadyClockTimePoint steady_clock_time_point{static_cast<u64_le>(ms.count() / 1000), {}}; | ||||
|  | ||||
|     CalendarTime calendar_time{}; | ||||
|     calendar_time.year = tm->tm_year + 1900; | ||||
|     calendar_time.month = tm->tm_mon + 1; | ||||
|     calendar_time.day = tm->tm_mday; | ||||
|     calendar_time.hour = tm->tm_hour; | ||||
|     calendar_time.minute = tm->tm_min; | ||||
|     calendar_time.second = tm->tm_sec; | ||||
|     calendar_time.year = static_cast<u16_le>(tm->tm_year + 1900); | ||||
|     calendar_time.month = static_cast<u8>(tm->tm_mon + 1); | ||||
|     calendar_time.day = static_cast<u8>(tm->tm_mday); | ||||
|     calendar_time.hour = static_cast<u8>(tm->tm_hour); | ||||
|     calendar_time.minute = static_cast<u8>(tm->tm_min); | ||||
|     calendar_time.second = static_cast<u8>(tm->tm_sec); | ||||
|  | ||||
|     ClockSnapshot clock_snapshot{}; | ||||
|     clock_snapshot.system_posix_time = time_since_epoch; | ||||
|   | ||||
| @@ -541,7 +541,7 @@ private: | ||||
|             } else { | ||||
|                 // Wait the current thread until a buffer becomes available | ||||
|                 ctx.SleepClientThread( | ||||
|                     "IHOSBinderDriver::DequeueBuffer", -1, | ||||
|                     "IHOSBinderDriver::DequeueBuffer", UINT64_MAX, | ||||
|                     [=](Kernel::SharedPtr<Kernel::Thread> thread, Kernel::HLERequestContext& ctx, | ||||
|                         Kernel::ThreadWakeupReason reason) { | ||||
|                         // Repeat TransactParcel DequeueBuffer when a buffer is available | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 bunnei
					bunnei