mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-11-04 00:49:02 -06:00 
			
		
		
		
	Merge pull request #9912 from liamwhite/err
hle: rename legacy errors to Results
This commit is contained in:
		@@ -454,7 +454,6 @@ add_library(core STATIC
 | 
			
		||||
    hle/service/filesystem/fsp_srv.h
 | 
			
		||||
    hle/service/fgm/fgm.cpp
 | 
			
		||||
    hle/service/fgm/fgm.h
 | 
			
		||||
    hle/service/friend/errors.h
 | 
			
		||||
    hle/service/friend/friend.cpp
 | 
			
		||||
    hle/service/friend/friend.h
 | 
			
		||||
    hle/service/friend/friend_interface.cpp
 | 
			
		||||
 
 | 
			
		||||
@@ -310,10 +310,10 @@ public:
 | 
			
		||||
    /// Clears the signaled state of the process if and only if it's signaled.
 | 
			
		||||
    ///
 | 
			
		||||
    /// @pre The process must not be already terminated. If this is called on a
 | 
			
		||||
    ///      terminated process, then ERR_INVALID_STATE will be returned.
 | 
			
		||||
    ///      terminated process, then ResultInvalidState will be returned.
 | 
			
		||||
    ///
 | 
			
		||||
    /// @pre The process must be in a signaled state. If this is called on a
 | 
			
		||||
    ///      process instance that is not signaled, ERR_INVALID_STATE will be
 | 
			
		||||
    ///      process instance that is not signaled, ResultInvalidState will be
 | 
			
		||||
    ///      returned.
 | 
			
		||||
    Result Reset();
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -30,12 +30,6 @@
 | 
			
		||||
 | 
			
		||||
namespace Service::Account {
 | 
			
		||||
 | 
			
		||||
constexpr Result ERR_INVALID_USER_ID{ErrorModule::Account, 20};
 | 
			
		||||
constexpr Result ERR_INVALID_APPLICATION_ID{ErrorModule::Account, 22};
 | 
			
		||||
constexpr Result ERR_INVALID_BUFFER{ErrorModule::Account, 30};
 | 
			
		||||
constexpr Result ERR_INVALID_BUFFER_SIZE{ErrorModule::Account, 31};
 | 
			
		||||
constexpr Result ERR_FAILED_SAVE_DATA{ErrorModule::Account, 100};
 | 
			
		||||
 | 
			
		||||
// Thumbnails are hard coded to be at least this size
 | 
			
		||||
constexpr std::size_t THUMBNAIL_SIZE = 0x24000;
 | 
			
		||||
 | 
			
		||||
@@ -384,7 +378,7 @@ protected:
 | 
			
		||||
        if (user_data.size() < sizeof(UserData)) {
 | 
			
		||||
            LOG_ERROR(Service_ACC, "UserData buffer too small!");
 | 
			
		||||
            IPC::ResponseBuilder rb{ctx, 2};
 | 
			
		||||
            rb.Push(ERR_INVALID_BUFFER);
 | 
			
		||||
            rb.Push(Account::ResultInvalidArrayLength);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -394,7 +388,7 @@ protected:
 | 
			
		||||
        if (!profile_manager.SetProfileBaseAndData(user_id, base, data)) {
 | 
			
		||||
            LOG_ERROR(Service_ACC, "Failed to update user data and base!");
 | 
			
		||||
            IPC::ResponseBuilder rb{ctx, 2};
 | 
			
		||||
            rb.Push(ERR_FAILED_SAVE_DATA);
 | 
			
		||||
            rb.Push(Account::ResultAccountUpdateFailed);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -417,7 +411,7 @@ protected:
 | 
			
		||||
        if (user_data.size() < sizeof(UserData)) {
 | 
			
		||||
            LOG_ERROR(Service_ACC, "UserData buffer too small!");
 | 
			
		||||
            IPC::ResponseBuilder rb{ctx, 2};
 | 
			
		||||
            rb.Push(ERR_INVALID_BUFFER);
 | 
			
		||||
            rb.Push(Account::ResultInvalidArrayLength);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -432,7 +426,7 @@ protected:
 | 
			
		||||
            !profile_manager.SetProfileBaseAndData(user_id, base, data)) {
 | 
			
		||||
            LOG_ERROR(Service_ACC, "Failed to update profile data, base, and image!");
 | 
			
		||||
            IPC::ResponseBuilder rb{ctx, 2};
 | 
			
		||||
            rb.Push(ERR_FAILED_SAVE_DATA);
 | 
			
		||||
            rb.Push(Account::ResultAccountUpdateFailed);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -764,7 +758,7 @@ void Module::Interface::InitializeApplicationInfoRestricted(HLERequestContext& c
 | 
			
		||||
Result Module::Interface::InitializeApplicationInfoBase() {
 | 
			
		||||
    if (application_info) {
 | 
			
		||||
        LOG_ERROR(Service_ACC, "Application already initialized");
 | 
			
		||||
        return ERR_ACCOUNTINFO_ALREADY_INITIALIZED;
 | 
			
		||||
        return Account::ResultApplicationInfoAlreadyInitialized;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // TODO(ogniK): This should be changed to reflect the target process for when we have multiple
 | 
			
		||||
@@ -775,7 +769,7 @@ Result Module::Interface::InitializeApplicationInfoBase() {
 | 
			
		||||
 | 
			
		||||
    if (launch_property.Failed()) {
 | 
			
		||||
        LOG_ERROR(Service_ACC, "Failed to get launch property");
 | 
			
		||||
        return ERR_ACCOUNTINFO_BAD_APPLICATION;
 | 
			
		||||
        return Account::ResultInvalidApplication;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    switch (launch_property->base_game_storage_id) {
 | 
			
		||||
@@ -791,7 +785,7 @@ Result Module::Interface::InitializeApplicationInfoBase() {
 | 
			
		||||
    default:
 | 
			
		||||
        LOG_ERROR(Service_ACC, "Invalid game storage ID! storage_id={}",
 | 
			
		||||
                  launch_property->base_game_storage_id);
 | 
			
		||||
        return ERR_ACCOUNTINFO_BAD_APPLICATION;
 | 
			
		||||
        return Account::ResultInvalidApplication;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    LOG_WARNING(Service_ACC, "ApplicationInfo init required");
 | 
			
		||||
@@ -899,20 +893,20 @@ void Module::Interface::StoreSaveDataThumbnail(HLERequestContext& ctx, const Com
 | 
			
		||||
 | 
			
		||||
    if (tid == 0) {
 | 
			
		||||
        LOG_ERROR(Service_ACC, "TitleID is not valid!");
 | 
			
		||||
        rb.Push(ERR_INVALID_APPLICATION_ID);
 | 
			
		||||
        rb.Push(Account::ResultInvalidApplication);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (uuid.IsInvalid()) {
 | 
			
		||||
        LOG_ERROR(Service_ACC, "User ID is not valid!");
 | 
			
		||||
        rb.Push(ERR_INVALID_USER_ID);
 | 
			
		||||
        rb.Push(Account::ResultInvalidUserId);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
    const auto thumbnail_size = ctx.GetReadBufferSize();
 | 
			
		||||
    if (thumbnail_size != THUMBNAIL_SIZE) {
 | 
			
		||||
        LOG_ERROR(Service_ACC, "Buffer size is empty! size={:X} expecting {:X}", thumbnail_size,
 | 
			
		||||
                  THUMBNAIL_SIZE);
 | 
			
		||||
        rb.Push(ERR_INVALID_BUFFER_SIZE);
 | 
			
		||||
        rb.Push(Account::ResultInvalidArrayLength);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,13 @@
 | 
			
		||||
 | 
			
		||||
namespace Service::Account {
 | 
			
		||||
 | 
			
		||||
constexpr Result ERR_ACCOUNTINFO_BAD_APPLICATION{ErrorModule::Account, 22};
 | 
			
		||||
constexpr Result ERR_ACCOUNTINFO_ALREADY_INITIALIZED{ErrorModule::Account, 41};
 | 
			
		||||
constexpr Result ResultCancelledByUser{ErrorModule::Account, 1};
 | 
			
		||||
constexpr Result ResultNoNotifications{ErrorModule::Account, 15};
 | 
			
		||||
constexpr Result ResultInvalidUserId{ErrorModule::Account, 20};
 | 
			
		||||
constexpr Result ResultInvalidApplication{ErrorModule::Account, 22};
 | 
			
		||||
constexpr Result ResultNullptr{ErrorModule::Account, 30};
 | 
			
		||||
constexpr Result ResultInvalidArrayLength{ErrorModule::Account, 32};
 | 
			
		||||
constexpr Result ResultApplicationInfoAlreadyInitialized{ErrorModule::Account, 41};
 | 
			
		||||
constexpr Result ResultAccountUpdateFailed{ErrorModule::Account, 100};
 | 
			
		||||
 | 
			
		||||
} // namespace Service::Account
 | 
			
		||||
 
 | 
			
		||||
@@ -39,9 +39,9 @@
 | 
			
		||||
 | 
			
		||||
namespace Service::AM {
 | 
			
		||||
 | 
			
		||||
constexpr Result ERR_NO_DATA_IN_CHANNEL{ErrorModule::AM, 2};
 | 
			
		||||
constexpr Result ERR_NO_MESSAGES{ErrorModule::AM, 3};
 | 
			
		||||
constexpr Result ERR_SIZE_OUT_OF_BOUNDS{ErrorModule::AM, 503};
 | 
			
		||||
constexpr Result ResultNoDataInChannel{ErrorModule::AM, 2};
 | 
			
		||||
constexpr Result ResultNoMessages{ErrorModule::AM, 3};
 | 
			
		||||
constexpr Result ResultInvalidOffset{ErrorModule::AM, 503};
 | 
			
		||||
 | 
			
		||||
enum class LaunchParameterKind : u32 {
 | 
			
		||||
    ApplicationSpecific = 1,
 | 
			
		||||
@@ -758,7 +758,7 @@ void ICommonStateGetter::ReceiveMessage(HLERequestContext& ctx) {
 | 
			
		||||
 | 
			
		||||
    if (message == AppletMessageQueue::AppletMessage::None) {
 | 
			
		||||
        LOG_ERROR(Service_AM, "Message queue is empty");
 | 
			
		||||
        rb.Push(ERR_NO_MESSAGES);
 | 
			
		||||
        rb.Push(AM::ResultNoMessages);
 | 
			
		||||
        rb.PushEnum<AppletMessageQueue::AppletMessage>(message);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
@@ -1028,7 +1028,7 @@ private:
 | 
			
		||||
            LOG_DEBUG(Service_AM,
 | 
			
		||||
                      "storage is a nullptr. There is no data in the current normal channel");
 | 
			
		||||
            IPC::ResponseBuilder rb{ctx, 2};
 | 
			
		||||
            rb.Push(ERR_NO_DATA_IN_CHANNEL);
 | 
			
		||||
            rb.Push(AM::ResultNoDataInChannel);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -1059,7 +1059,7 @@ private:
 | 
			
		||||
            LOG_DEBUG(Service_AM,
 | 
			
		||||
                      "storage is a nullptr. There is no data in the current interactive channel");
 | 
			
		||||
            IPC::ResponseBuilder rb{ctx, 2};
 | 
			
		||||
            rb.Push(ERR_NO_DATA_IN_CHANNEL);
 | 
			
		||||
            rb.Push(AM::ResultNoDataInChannel);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -1138,7 +1138,7 @@ void IStorageAccessor::Write(HLERequestContext& ctx) {
 | 
			
		||||
                  backing.GetSize(), size, offset);
 | 
			
		||||
 | 
			
		||||
        IPC::ResponseBuilder rb{ctx, 2};
 | 
			
		||||
        rb.Push(ERR_SIZE_OUT_OF_BOUNDS);
 | 
			
		||||
        rb.Push(AM::ResultInvalidOffset);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -1161,7 +1161,7 @@ void IStorageAccessor::Read(HLERequestContext& ctx) {
 | 
			
		||||
                  backing.GetSize(), size, offset);
 | 
			
		||||
 | 
			
		||||
        IPC::ResponseBuilder rb{ctx, 2};
 | 
			
		||||
        rb.Push(ERR_SIZE_OUT_OF_BOUNDS);
 | 
			
		||||
        rb.Push(AM::ResultInvalidOffset);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -1502,7 +1502,7 @@ void IApplicationFunctions::PopLaunchParameter(HLERequestContext& ctx) {
 | 
			
		||||
 | 
			
		||||
    LOG_ERROR(Service_AM, "Attempted to load launch parameter but none was found!");
 | 
			
		||||
    IPC::ResponseBuilder rb{ctx, 2};
 | 
			
		||||
    rb.Push(ERR_NO_DATA_IN_CHANNEL);
 | 
			
		||||
    rb.Push(AM::ResultNoDataInChannel);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void IApplicationFunctions::CreateApplicationAndRequestToStartForQuest(HLERequestContext& ctx) {
 | 
			
		||||
@@ -1799,7 +1799,7 @@ void IApplicationFunctions::TryPopFromFriendInvitationStorageChannel(HLERequestC
 | 
			
		||||
    LOG_WARNING(Service_AM, "(STUBBED) called");
 | 
			
		||||
 | 
			
		||||
    IPC::ResponseBuilder rb{ctx, 2};
 | 
			
		||||
    rb.Push(ERR_NO_DATA_IN_CHANNEL);
 | 
			
		||||
    rb.Push(AM::ResultNoDataInChannel);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void IApplicationFunctions::GetNotificationStorageChannelEvent(HLERequestContext& ctx) {
 | 
			
		||||
 
 | 
			
		||||
@@ -19,10 +19,9 @@
 | 
			
		||||
 | 
			
		||||
namespace Service::AM::Applets {
 | 
			
		||||
 | 
			
		||||
// This error code (0x183ACA) is thrown when the applet fails to initialize.
 | 
			
		||||
[[maybe_unused]] constexpr Result ERR_CONTROLLER_APPLET_3101{ErrorModule::HID, 3101};
 | 
			
		||||
// This error code (0x183CCA) is thrown when the u32 result in ControllerSupportResultInfo is 2.
 | 
			
		||||
[[maybe_unused]] constexpr Result ERR_CONTROLLER_APPLET_3102{ErrorModule::HID, 3102};
 | 
			
		||||
[[maybe_unused]] constexpr Result ResultControllerSupportCanceled{ErrorModule::HID, 3101};
 | 
			
		||||
[[maybe_unused]] constexpr Result ResultControllerSupportNotSupportedNpadStyle{ErrorModule::HID,
 | 
			
		||||
                                                                               3102};
 | 
			
		||||
 | 
			
		||||
static Core::Frontend::ControllerParameters ConvertToFrontendParameters(
 | 
			
		||||
    ControllerSupportArgPrivate private_arg, ControllerSupportArgHeader header, bool enable_text,
 | 
			
		||||
 
 | 
			
		||||
@@ -7,13 +7,12 @@
 | 
			
		||||
#include "common/string_util.h"
 | 
			
		||||
#include "core/core.h"
 | 
			
		||||
#include "core/frontend/applets/profile_select.h"
 | 
			
		||||
#include "core/hle/service/acc/errors.h"
 | 
			
		||||
#include "core/hle/service/am/am.h"
 | 
			
		||||
#include "core/hle/service/am/applets/applet_profile_select.h"
 | 
			
		||||
 | 
			
		||||
namespace Service::AM::Applets {
 | 
			
		||||
 | 
			
		||||
constexpr Result ERR_USER_CANCELLED_SELECTION{ErrorModule::Account, 1};
 | 
			
		||||
 | 
			
		||||
ProfileSelect::ProfileSelect(Core::System& system_, LibraryAppletMode applet_mode_,
 | 
			
		||||
                             const Core::Frontend::ProfileSelectApplet& frontend_)
 | 
			
		||||
    : Applet{system_, applet_mode_}, frontend{frontend_}, system{system_} {}
 | 
			
		||||
@@ -63,8 +62,8 @@ void ProfileSelect::SelectionComplete(std::optional<Common::UUID> uuid) {
 | 
			
		||||
        output.result = 0;
 | 
			
		||||
        output.uuid_selected = *uuid;
 | 
			
		||||
    } else {
 | 
			
		||||
        status = ERR_USER_CANCELLED_SELECTION;
 | 
			
		||||
        output.result = ERR_USER_CANCELLED_SELECTION.raw;
 | 
			
		||||
        status = Account::ResultCancelledByUser;
 | 
			
		||||
        output.result = Account::ResultCancelledByUser.raw;
 | 
			
		||||
        output.uuid_selected = Common::InvalidUUID;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -170,7 +170,7 @@ private:
 | 
			
		||||
 | 
			
		||||
        if (impl->GetSystem().GetExecutionMode() == AudioCore::ExecutionMode::Manual) {
 | 
			
		||||
            IPC::ResponseBuilder rb{ctx, 2};
 | 
			
		||||
            rb.Push(ERR_NOT_SUPPORTED);
 | 
			
		||||
            rb.Push(Audio::ResultNotSupported);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -448,7 +448,7 @@ void AudRenU::OpenAudioRenderer(HLERequestContext& ctx) {
 | 
			
		||||
    if (impl->GetSessionCount() + 1 > AudioCore::MaxRendererSessions) {
 | 
			
		||||
        LOG_ERROR(Service_Audio, "Too many AudioRenderer sessions open!");
 | 
			
		||||
        IPC::ResponseBuilder rb{ctx, 2};
 | 
			
		||||
        rb.Push(ERR_MAXIMUM_SESSIONS_REACHED);
 | 
			
		||||
        rb.Push(Audio::ResultOutOfSessions);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -461,7 +461,7 @@ void AudRenU::OpenAudioRenderer(HLERequestContext& ctx) {
 | 
			
		||||
    if (session_id == -1) {
 | 
			
		||||
        LOG_ERROR(Service_Audio, "Tried to open a session that's already in use!");
 | 
			
		||||
        IPC::ResponseBuilder rb{ctx, 2};
 | 
			
		||||
        rb.Push(ERR_MAXIMUM_SESSIONS_REACHED);
 | 
			
		||||
        rb.Push(Audio::ResultOutOfSessions);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,17 +7,17 @@
 | 
			
		||||
 | 
			
		||||
namespace Service::Audio {
 | 
			
		||||
 | 
			
		||||
constexpr Result ERR_INVALID_DEVICE_NAME{ErrorModule::Audio, 1};
 | 
			
		||||
constexpr Result ERR_OPERATION_FAILED{ErrorModule::Audio, 2};
 | 
			
		||||
constexpr Result ERR_INVALID_SAMPLE_RATE{ErrorModule::Audio, 3};
 | 
			
		||||
constexpr Result ERR_INSUFFICIENT_BUFFER_SIZE{ErrorModule::Audio, 4};
 | 
			
		||||
constexpr Result ERR_MAXIMUM_SESSIONS_REACHED{ErrorModule::Audio, 5};
 | 
			
		||||
constexpr Result ERR_BUFFER_COUNT_EXCEEDED{ErrorModule::Audio, 8};
 | 
			
		||||
constexpr Result ERR_INVALID_CHANNEL_COUNT{ErrorModule::Audio, 10};
 | 
			
		||||
constexpr Result ERR_INVALID_UPDATE_DATA{ErrorModule::Audio, 41};
 | 
			
		||||
constexpr Result ERR_POOL_MAPPING_FAILED{ErrorModule::Audio, 42};
 | 
			
		||||
constexpr Result ERR_NOT_SUPPORTED{ErrorModule::Audio, 513};
 | 
			
		||||
constexpr Result ERR_INVALID_PROCESS_HANDLE{ErrorModule::Audio, 1536};
 | 
			
		||||
constexpr Result ERR_INVALID_REVISION{ErrorModule::Audio, 1537};
 | 
			
		||||
constexpr Result ResultNotFound{ErrorModule::Audio, 1};
 | 
			
		||||
constexpr Result ResultOperationFailed{ErrorModule::Audio, 2};
 | 
			
		||||
constexpr Result ResultInvalidSampleRate{ErrorModule::Audio, 3};
 | 
			
		||||
constexpr Result ResultInsufficientBuffer{ErrorModule::Audio, 4};
 | 
			
		||||
constexpr Result ResultOutOfSessions{ErrorModule::Audio, 5};
 | 
			
		||||
constexpr Result ResultBufferCountReached{ErrorModule::Audio, 8};
 | 
			
		||||
constexpr Result ResultInvalidChannelCount{ErrorModule::Audio, 10};
 | 
			
		||||
constexpr Result ResultInvalidUpdateInfo{ErrorModule::Audio, 41};
 | 
			
		||||
constexpr Result ResultInvalidAddressInfo{ErrorModule::Audio, 42};
 | 
			
		||||
constexpr Result ResultNotSupported{ErrorModule::Audio, 513};
 | 
			
		||||
constexpr Result ResultInvalidHandle{ErrorModule::Audio, 1536};
 | 
			
		||||
constexpr Result ResultInvalidRevision{ErrorModule::Audio, 1537};
 | 
			
		||||
 | 
			
		||||
} // namespace Service::Audio
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +0,0 @@
 | 
			
		||||
// SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project
 | 
			
		||||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include "core/hle/result.h"
 | 
			
		||||
 | 
			
		||||
namespace Service::Friend {
 | 
			
		||||
 | 
			
		||||
constexpr Result ERR_NO_NOTIFICATIONS{ErrorModule::Account, 15};
 | 
			
		||||
}
 | 
			
		||||
@@ -6,7 +6,7 @@
 | 
			
		||||
#include "common/uuid.h"
 | 
			
		||||
#include "core/core.h"
 | 
			
		||||
#include "core/hle/kernel/k_event.h"
 | 
			
		||||
#include "core/hle/service/friend/errors.h"
 | 
			
		||||
#include "core/hle/service/acc/errors.h"
 | 
			
		||||
#include "core/hle/service/friend/friend.h"
 | 
			
		||||
#include "core/hle/service/friend/friend_interface.h"
 | 
			
		||||
#include "core/hle/service/ipc_helpers.h"
 | 
			
		||||
@@ -259,7 +259,7 @@ private:
 | 
			
		||||
        if (notifications.empty()) {
 | 
			
		||||
            LOG_ERROR(Service_Friend, "No notifications in queue!");
 | 
			
		||||
            IPC::ResponseBuilder rb{ctx, 2};
 | 
			
		||||
            rb.Push(ERR_NO_NOTIFICATIONS);
 | 
			
		||||
            rb.Push(Account::ResultNoNotifications);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -61,7 +61,7 @@ void ARP_R::GetApplicationLaunchProperty(HLERequestContext& ctx) {
 | 
			
		||||
    if (!title_id.has_value()) {
 | 
			
		||||
        LOG_ERROR(Service_ARP, "Failed to get title ID for process ID!");
 | 
			
		||||
        IPC::ResponseBuilder rb{ctx, 2};
 | 
			
		||||
        rb.Push(ERR_NOT_REGISTERED);
 | 
			
		||||
        rb.Push(Glue::ResultProcessIdNotRegistered);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -109,7 +109,7 @@ void ARP_R::GetApplicationControlProperty(HLERequestContext& ctx) {
 | 
			
		||||
    if (!title_id.has_value()) {
 | 
			
		||||
        LOG_ERROR(Service_ARP, "Failed to get title ID for process ID!");
 | 
			
		||||
        IPC::ResponseBuilder rb{ctx, 2};
 | 
			
		||||
        rb.Push(ERR_NOT_REGISTERED);
 | 
			
		||||
        rb.Push(Glue::ResultProcessIdNotRegistered);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -178,7 +178,7 @@ private:
 | 
			
		||||
        if (process_id == 0) {
 | 
			
		||||
            LOG_ERROR(Service_ARP, "Must have non-zero process ID!");
 | 
			
		||||
            IPC::ResponseBuilder rb{ctx, 2};
 | 
			
		||||
            rb.Push(ERR_INVALID_PROCESS_ID);
 | 
			
		||||
            rb.Push(Glue::ResultInvalidProcessId);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -186,7 +186,7 @@ private:
 | 
			
		||||
            LOG_ERROR(Service_ARP,
 | 
			
		||||
                      "Attempted to issue registrar, but registrar is already issued!");
 | 
			
		||||
            IPC::ResponseBuilder rb{ctx, 2};
 | 
			
		||||
            rb.Push(ERR_INVALID_ACCESS);
 | 
			
		||||
            rb.Push(Glue::ResultAlreadyBound);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -205,7 +205,7 @@ private:
 | 
			
		||||
                Service_ARP,
 | 
			
		||||
                "Attempted to set application launch property, but registrar is already issued!");
 | 
			
		||||
            IPC::ResponseBuilder rb{ctx, 2};
 | 
			
		||||
            rb.Push(ERR_INVALID_ACCESS);
 | 
			
		||||
            rb.Push(Glue::ResultAlreadyBound);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -224,7 +224,7 @@ private:
 | 
			
		||||
                Service_ARP,
 | 
			
		||||
                "Attempted to set application control property, but registrar is already issued!");
 | 
			
		||||
            IPC::ResponseBuilder rb{ctx, 2};
 | 
			
		||||
            rb.Push(ERR_INVALID_ACCESS);
 | 
			
		||||
            rb.Push(Glue::ResultAlreadyBound);
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@@ -263,7 +263,7 @@ void ARP_W::AcquireRegistrar(HLERequestContext& ctx) {
 | 
			
		||||
        system, [this](u64 process_id, ApplicationLaunchProperty launch, std::vector<u8> control) {
 | 
			
		||||
            const auto res = GetTitleIDForProcessID(system, process_id);
 | 
			
		||||
            if (!res.has_value()) {
 | 
			
		||||
                return ERR_NOT_REGISTERED;
 | 
			
		||||
                return Glue::ResultProcessIdNotRegistered;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return manager.Register(*res, launch, std::move(control));
 | 
			
		||||
@@ -283,7 +283,7 @@ void ARP_W::UnregisterApplicationInstance(HLERequestContext& ctx) {
 | 
			
		||||
    if (process_id == 0) {
 | 
			
		||||
        LOG_ERROR(Service_ARP, "Must have non-zero process ID!");
 | 
			
		||||
        IPC::ResponseBuilder rb{ctx, 2};
 | 
			
		||||
        rb.Push(ERR_INVALID_PROCESS_ID);
 | 
			
		||||
        rb.Push(Glue::ResultInvalidProcessId);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -292,7 +292,7 @@ void ARP_W::UnregisterApplicationInstance(HLERequestContext& ctx) {
 | 
			
		||||
    if (!title_id.has_value()) {
 | 
			
		||||
        LOG_ERROR(Service_ARP, "No title ID for process ID!");
 | 
			
		||||
        IPC::ResponseBuilder rb{ctx, 2};
 | 
			
		||||
        rb.Push(ERR_NOT_REGISTERED);
 | 
			
		||||
        rb.Push(Glue::ResultProcessIdNotRegistered);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,9 +7,8 @@
 | 
			
		||||
 | 
			
		||||
namespace Service::Glue {
 | 
			
		||||
 | 
			
		||||
constexpr Result ERR_INVALID_RESOURCE{ErrorModule::ARP, 30};
 | 
			
		||||
constexpr Result ERR_INVALID_PROCESS_ID{ErrorModule::ARP, 31};
 | 
			
		||||
constexpr Result ERR_INVALID_ACCESS{ErrorModule::ARP, 42};
 | 
			
		||||
constexpr Result ERR_NOT_REGISTERED{ErrorModule::ARP, 102};
 | 
			
		||||
constexpr Result ResultInvalidProcessId{ErrorModule::ARP, 31};
 | 
			
		||||
constexpr Result ResultAlreadyBound{ErrorModule::ARP, 42};
 | 
			
		||||
constexpr Result ResultProcessIdNotRegistered{ErrorModule::ARP, 102};
 | 
			
		||||
 | 
			
		||||
} // namespace Service::Glue
 | 
			
		||||
 
 | 
			
		||||
@@ -17,12 +17,12 @@ ARPManager::~ARPManager() = default;
 | 
			
		||||
 | 
			
		||||
ResultVal<ApplicationLaunchProperty> ARPManager::GetLaunchProperty(u64 title_id) const {
 | 
			
		||||
    if (title_id == 0) {
 | 
			
		||||
        return ERR_INVALID_PROCESS_ID;
 | 
			
		||||
        return Glue::ResultInvalidProcessId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const auto iter = entries.find(title_id);
 | 
			
		||||
    if (iter == entries.end()) {
 | 
			
		||||
        return ERR_NOT_REGISTERED;
 | 
			
		||||
        return Glue::ResultProcessIdNotRegistered;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return iter->second.launch;
 | 
			
		||||
@@ -30,12 +30,12 @@ ResultVal<ApplicationLaunchProperty> ARPManager::GetLaunchProperty(u64 title_id)
 | 
			
		||||
 | 
			
		||||
ResultVal<std::vector<u8>> ARPManager::GetControlProperty(u64 title_id) const {
 | 
			
		||||
    if (title_id == 0) {
 | 
			
		||||
        return ERR_INVALID_PROCESS_ID;
 | 
			
		||||
        return Glue::ResultInvalidProcessId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const auto iter = entries.find(title_id);
 | 
			
		||||
    if (iter == entries.end()) {
 | 
			
		||||
        return ERR_NOT_REGISTERED;
 | 
			
		||||
        return Glue::ResultProcessIdNotRegistered;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return iter->second.control;
 | 
			
		||||
@@ -44,12 +44,12 @@ ResultVal<std::vector<u8>> ARPManager::GetControlProperty(u64 title_id) const {
 | 
			
		||||
Result ARPManager::Register(u64 title_id, ApplicationLaunchProperty launch,
 | 
			
		||||
                            std::vector<u8> control) {
 | 
			
		||||
    if (title_id == 0) {
 | 
			
		||||
        return ERR_INVALID_PROCESS_ID;
 | 
			
		||||
        return Glue::ResultInvalidProcessId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const auto iter = entries.find(title_id);
 | 
			
		||||
    if (iter != entries.end()) {
 | 
			
		||||
        return ERR_INVALID_ACCESS;
 | 
			
		||||
        return Glue::ResultAlreadyBound;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    entries.insert_or_assign(title_id, MapEntry{launch, std::move(control)});
 | 
			
		||||
@@ -58,12 +58,12 @@ Result ARPManager::Register(u64 title_id, ApplicationLaunchProperty launch,
 | 
			
		||||
 | 
			
		||||
Result ARPManager::Unregister(u64 title_id) {
 | 
			
		||||
    if (title_id == 0) {
 | 
			
		||||
        return ERR_INVALID_PROCESS_ID;
 | 
			
		||||
        return Glue::ResultInvalidProcessId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const auto iter = entries.find(title_id);
 | 
			
		||||
    if (iter == entries.end()) {
 | 
			
		||||
        return ERR_NOT_REGISTERED;
 | 
			
		||||
        return Glue::ResultProcessIdNotRegistered;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    entries.erase(iter);
 | 
			
		||||
 
 | 
			
		||||
@@ -30,23 +30,23 @@ public:
 | 
			
		||||
    ~ARPManager();
 | 
			
		||||
 | 
			
		||||
    // Returns the ApplicationLaunchProperty corresponding to the provided title ID if it was
 | 
			
		||||
    // previously registered, otherwise ERR_NOT_REGISTERED if it was never registered or
 | 
			
		||||
    // ERR_INVALID_PROCESS_ID if the title ID is 0.
 | 
			
		||||
    // previously registered, otherwise ResultProcessIdNotRegistered if it was never registered or
 | 
			
		||||
    // ResultInvalidProcessId if the title ID is 0.
 | 
			
		||||
    ResultVal<ApplicationLaunchProperty> GetLaunchProperty(u64 title_id) const;
 | 
			
		||||
 | 
			
		||||
    // Returns a vector of the raw bytes of NACP data (necessarily 0x4000 in size) corresponding to
 | 
			
		||||
    // the provided title ID if it was previously registered, otherwise ERR_NOT_REGISTERED if it was
 | 
			
		||||
    // never registered or ERR_INVALID_PROCESS_ID if the title ID is 0.
 | 
			
		||||
    // the provided title ID if it was previously registered, otherwise ResultProcessIdNotRegistered
 | 
			
		||||
    // if it was never registered or ResultInvalidProcessId if the title ID is 0.
 | 
			
		||||
    ResultVal<std::vector<u8>> GetControlProperty(u64 title_id) const;
 | 
			
		||||
 | 
			
		||||
    // Adds a new entry to the internal database with the provided parameters, returning
 | 
			
		||||
    // ERR_INVALID_ACCESS if attempting to re-register a title ID without an intermediate Unregister
 | 
			
		||||
    // step, and ERR_INVALID_PROCESS_ID if the title ID is 0.
 | 
			
		||||
    // ResultProcessIdNotRegistered if attempting to re-register a title ID without an intermediate
 | 
			
		||||
    // Unregister step, and ResultInvalidProcessId if the title ID is 0.
 | 
			
		||||
    Result Register(u64 title_id, ApplicationLaunchProperty launch, std::vector<u8> control);
 | 
			
		||||
 | 
			
		||||
    // Removes the registration for the provided title ID from the database, returning
 | 
			
		||||
    // ERR_NOT_REGISTERED if it doesn't exist in the database and ERR_INVALID_PROCESS_ID if the
 | 
			
		||||
    // title ID is 0.
 | 
			
		||||
    // ResultProcessIdNotRegistered if it doesn't exist in the database and ResultInvalidProcessId
 | 
			
		||||
    // if the title ID is 0.
 | 
			
		||||
    Result Unregister(u64 title_id);
 | 
			
		||||
 | 
			
		||||
    // Removes all entries from the database, always succeeds. Should only be used when resetting
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,7 @@
 | 
			
		||||
 | 
			
		||||
namespace IPC {
 | 
			
		||||
 | 
			
		||||
constexpr Result ERR_REMOTE_PROCESS_DEAD{ErrorModule::HIPC, 301};
 | 
			
		||||
constexpr Result ResultSessionClosed{ErrorModule::HIPC, 301};
 | 
			
		||||
 | 
			
		||||
class RequestHelperBase {
 | 
			
		||||
protected:
 | 
			
		||||
 
 | 
			
		||||
@@ -7,5 +7,6 @@
 | 
			
		||||
 | 
			
		||||
namespace Service::NS {
 | 
			
		||||
 | 
			
		||||
constexpr Result ERR_APPLICATION_LANGUAGE_NOT_FOUND{ErrorModule::NS, 300};
 | 
			
		||||
}
 | 
			
		||||
constexpr Result ResultApplicationLanguageNotFound{ErrorModule::NS, 300};
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -416,14 +416,14 @@ ResultVal<u8> IApplicationManagerInterface::GetApplicationDesiredLanguage(
 | 
			
		||||
    if (application_language == std::nullopt) {
 | 
			
		||||
        LOG_ERROR(Service_NS, "Could not convert application language! language_code={}",
 | 
			
		||||
                  language_code);
 | 
			
		||||
        return ERR_APPLICATION_LANGUAGE_NOT_FOUND;
 | 
			
		||||
        return Service::NS::ResultApplicationLanguageNotFound;
 | 
			
		||||
    }
 | 
			
		||||
    const auto priority_list = GetApplicationLanguagePriorityList(*application_language);
 | 
			
		||||
    if (!priority_list) {
 | 
			
		||||
        LOG_ERROR(Service_NS,
 | 
			
		||||
                  "Could not find application language priorities! application_language={}",
 | 
			
		||||
                  *application_language);
 | 
			
		||||
        return ERR_APPLICATION_LANGUAGE_NOT_FOUND;
 | 
			
		||||
        return Service::NS::ResultApplicationLanguageNotFound;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Try to find a valid language.
 | 
			
		||||
@@ -436,7 +436,7 @@ ResultVal<u8> IApplicationManagerInterface::GetApplicationDesiredLanguage(
 | 
			
		||||
 | 
			
		||||
    LOG_ERROR(Service_NS, "Could not find a valid language! supported_languages={:08X}",
 | 
			
		||||
              supported_languages);
 | 
			
		||||
    return ERR_APPLICATION_LANGUAGE_NOT_FOUND;
 | 
			
		||||
    return Service::NS::ResultApplicationLanguageNotFound;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void IApplicationManagerInterface::ConvertApplicationLanguageToLanguageCode(
 | 
			
		||||
@@ -461,7 +461,7 @@ ResultVal<u64> IApplicationManagerInterface::ConvertApplicationLanguageToLanguag
 | 
			
		||||
        ConvertToLanguageCode(static_cast<ApplicationLanguage>(application_language));
 | 
			
		||||
    if (language_code == std::nullopt) {
 | 
			
		||||
        LOG_ERROR(Service_NS, "Language not found! application_language={}", application_language);
 | 
			
		||||
        return ERR_APPLICATION_LANGUAGE_NOT_FOUND;
 | 
			
		||||
        return Service::NS::ResultApplicationLanguageNotFound;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return static_cast<u64>(*language_code);
 | 
			
		||||
 
 | 
			
		||||
@@ -404,7 +404,7 @@ Result ServerManager::CompleteSyncRequest(RequestState&& request) {
 | 
			
		||||
    rc = request.session->SendReplyHLE();
 | 
			
		||||
 | 
			
		||||
    // If the session has been closed, we're done.
 | 
			
		||||
    if (rc == Kernel::ResultSessionClosed || service_rc == IPC::ERR_REMOTE_PROCESS_DEAD) {
 | 
			
		||||
    if (rc == Kernel::ResultSessionClosed || service_rc == IPC::ResultSessionClosed) {
 | 
			
		||||
        // Close the session.
 | 
			
		||||
        request.session->Close();
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -176,7 +176,7 @@ Result ServiceFrameworkBase::HandleSyncRequest(Kernel::KServerSession& session,
 | 
			
		||||
    case IPC::CommandType::TIPC_Close: {
 | 
			
		||||
        IPC::ResponseBuilder rb{ctx, 2};
 | 
			
		||||
        rb.Push(ResultSuccess);
 | 
			
		||||
        result = IPC::ERR_REMOTE_PROCESS_DEAD;
 | 
			
		||||
        result = IPC::ResultSessionClosed;
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
    case IPC::CommandType::ControlWithContext:
 | 
			
		||||
 
 | 
			
		||||
@@ -74,7 +74,7 @@ constexpr std::array<std::pair<LanguageCode, KeyboardLayout>, 18> language_to_la
 | 
			
		||||
constexpr std::size_t PRE_4_0_0_MAX_ENTRIES = 0xF;
 | 
			
		||||
constexpr std::size_t POST_4_0_0_MAX_ENTRIES = 0x40;
 | 
			
		||||
 | 
			
		||||
constexpr Result ERR_INVALID_LANGUAGE{ErrorModule::Settings, 625};
 | 
			
		||||
constexpr Result ResultInvalidLanguage{ErrorModule::Settings, 625};
 | 
			
		||||
 | 
			
		||||
void PushResponseLanguageCode(HLERequestContext& ctx, std::size_t num_language_codes) {
 | 
			
		||||
    IPC::ResponseBuilder rb{ctx, 3};
 | 
			
		||||
@@ -130,7 +130,7 @@ void SET::MakeLanguageCode(HLERequestContext& ctx) {
 | 
			
		||||
    if (index >= available_language_codes.size()) {
 | 
			
		||||
        LOG_ERROR(Service_SET, "Invalid language code index! index={}", index);
 | 
			
		||||
        IPC::ResponseBuilder rb{ctx, 2};
 | 
			
		||||
        rb.Push(ERR_INVALID_LANGUAGE);
 | 
			
		||||
        rb.Push(Set::ResultInvalidLanguage);
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -18,10 +18,10 @@
 | 
			
		||||
 | 
			
		||||
namespace Service::SM {
 | 
			
		||||
 | 
			
		||||
constexpr Result ERR_NOT_INITIALIZED(ErrorModule::SM, 2);
 | 
			
		||||
constexpr Result ERR_ALREADY_REGISTERED(ErrorModule::SM, 4);
 | 
			
		||||
constexpr Result ERR_INVALID_NAME(ErrorModule::SM, 6);
 | 
			
		||||
constexpr Result ERR_SERVICE_NOT_REGISTERED(ErrorModule::SM, 7);
 | 
			
		||||
constexpr Result ResultInvalidClient(ErrorModule::SM, 2);
 | 
			
		||||
constexpr Result ResultAlreadyRegistered(ErrorModule::SM, 4);
 | 
			
		||||
constexpr Result ResultInvalidServiceName(ErrorModule::SM, 6);
 | 
			
		||||
constexpr Result ResultNotRegistered(ErrorModule::SM, 7);
 | 
			
		||||
 | 
			
		||||
ServiceManager::ServiceManager(Kernel::KernelCore& kernel_) : kernel{kernel_} {
 | 
			
		||||
    controller_interface = std::make_unique<Controller>(kernel.System());
 | 
			
		||||
@@ -45,7 +45,7 @@ void ServiceManager::InvokeControlRequest(HLERequestContext& context) {
 | 
			
		||||
static Result ValidateServiceName(const std::string& name) {
 | 
			
		||||
    if (name.empty() || name.size() > 8) {
 | 
			
		||||
        LOG_ERROR(Service_SM, "Invalid service name! service={}", name);
 | 
			
		||||
        return ERR_INVALID_NAME;
 | 
			
		||||
        return Service::SM::ResultInvalidServiceName;
 | 
			
		||||
    }
 | 
			
		||||
    return ResultSuccess;
 | 
			
		||||
}
 | 
			
		||||
@@ -58,7 +58,7 @@ Result ServiceManager::RegisterService(std::string name, u32 max_sessions,
 | 
			
		||||
    std::scoped_lock lk{lock};
 | 
			
		||||
    if (registered_services.find(name) != registered_services.end()) {
 | 
			
		||||
        LOG_ERROR(Service_SM, "Service is already registered! service={}", name);
 | 
			
		||||
        return ERR_ALREADY_REGISTERED;
 | 
			
		||||
        return Service::SM::ResultAlreadyRegistered;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    auto* port = Kernel::KPort::Create(kernel);
 | 
			
		||||
@@ -80,7 +80,7 @@ Result ServiceManager::UnregisterService(const std::string& name) {
 | 
			
		||||
    const auto iter = registered_services.find(name);
 | 
			
		||||
    if (iter == registered_services.end()) {
 | 
			
		||||
        LOG_ERROR(Service_SM, "Server is not registered! service={}", name);
 | 
			
		||||
        return ERR_SERVICE_NOT_REGISTERED;
 | 
			
		||||
        return Service::SM::ResultNotRegistered;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    registered_services.erase(iter);
 | 
			
		||||
@@ -96,7 +96,7 @@ ResultVal<Kernel::KPort*> ServiceManager::GetServicePort(const std::string& name
 | 
			
		||||
    auto it = service_ports.find(name);
 | 
			
		||||
    if (it == service_ports.end()) {
 | 
			
		||||
        LOG_WARNING(Service_SM, "Server is not registered! service={}", name);
 | 
			
		||||
        return ERR_SERVICE_NOT_REGISTERED;
 | 
			
		||||
        return Service::SM::ResultNotRegistered;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return it->second;
 | 
			
		||||
@@ -160,7 +160,7 @@ static std::string PopServiceName(IPC::RequestParser& rp) {
 | 
			
		||||
 | 
			
		||||
ResultVal<Kernel::KClientSession*> SM::GetServiceImpl(HLERequestContext& ctx) {
 | 
			
		||||
    if (!ctx.GetManager()->GetIsInitializedForSm()) {
 | 
			
		||||
        return ERR_NOT_INITIALIZED;
 | 
			
		||||
        return Service::SM::ResultInvalidClient;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    IPC::RequestParser rp{ctx};
 | 
			
		||||
@@ -168,15 +168,15 @@ ResultVal<Kernel::KClientSession*> SM::GetServiceImpl(HLERequestContext& ctx) {
 | 
			
		||||
 | 
			
		||||
    // Find the named port.
 | 
			
		||||
    auto port_result = service_manager.GetServicePort(name);
 | 
			
		||||
    if (port_result.Code() == ERR_INVALID_NAME) {
 | 
			
		||||
    if (port_result.Code() == Service::SM::ResultInvalidServiceName) {
 | 
			
		||||
        LOG_ERROR(Service_SM, "Invalid service name '{}'", name);
 | 
			
		||||
        return ERR_INVALID_NAME;
 | 
			
		||||
        return Service::SM::ResultInvalidServiceName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (port_result.Failed()) {
 | 
			
		||||
        LOG_INFO(Service_SM, "Waiting for service {} to become available", name);
 | 
			
		||||
        ctx.SetIsDeferred();
 | 
			
		||||
        return ERR_SERVICE_NOT_REGISTERED;
 | 
			
		||||
        return Service::SM::ResultNotRegistered;
 | 
			
		||||
    }
 | 
			
		||||
    auto& port = port_result.Unwrap();
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user