HLE: Remove BaseInterface and add ns.cpp back

This commit is contained in:
James Rowe 2018-11-28 23:20:51 -07:00
parent f2167d76a8
commit 6c8faaf2c2
6 changed files with 64 additions and 42 deletions

View File

@ -205,6 +205,8 @@ add_library(core STATIC
hle/service/apt/apt_s.h hle/service/apt/apt_s.h
hle/service/apt/apt_u.cpp hle/service/apt/apt_u.cpp
hle/service/apt/apt_u.h hle/service/apt/apt_u.h
hle/service/apt/ns.cpp
hle/service/apt/ns.h
hle/service/apt/ns_s.cpp hle/service/apt/ns_s.cpp
hle/service/apt/ns_s.h hle/service/apt/ns_s.h
hle/service/apt/bcfnt/bcfnt.cpp hle/service/apt/bcfnt/bcfnt.cpp

View File

@ -7,8 +7,8 @@
#include "core/hle/applets/applet.h" #include "core/hle/applets/applet.h"
#include "core/hle/service/apt/applet_manager.h" #include "core/hle/service/apt/applet_manager.h"
#include "core/hle/service/apt/errors.h" #include "core/hle/service/apt/errors.h"
#include "core/hle/service/apt/ns.h"
#include "core/hle/service/cfg/cfg.h" #include "core/hle/service/cfg/cfg.h"
#include "core/hle/service/ns/ns.h"
namespace Service::APT { namespace Service::APT {

View File

@ -30,7 +30,7 @@
namespace Service::APT { namespace Service::APT {
Module::NSInterface::NSInterface(std::shared_ptr<Module> apt, const char* name, u32 max_session) Module::NSInterface::NSInterface(std::shared_ptr<Module> apt, const char* name, u32 max_session)
: ServiceFramework(name, max_session), BaseInterface(std::move(apt)) {} : ServiceFramework(name, max_session), apt(std::move(apt)) {}
Module::NSInterface::~NSInterface() = default; Module::NSInterface::~NSInterface() = default;
@ -860,7 +860,7 @@ void Module::APTInterface::CheckNew3DS(Kernel::HLERequestContext& ctx) {
} }
Module::APTInterface::APTInterface(std::shared_ptr<Module> apt, const char* name, u32 max_session) Module::APTInterface::APTInterface(std::shared_ptr<Module> apt, const char* name, u32 max_session)
: ServiceFramework(name, max_session), BaseInterface(std::move(apt)) {} : ServiceFramework(name, max_session), apt(std::move(apt)) {}
Module::APTInterface::~APTInterface() = default; Module::APTInterface::~APTInterface() = default;
@ -889,27 +889,3 @@ void InstallInterfaces(Core::System& system) {
} }
} // namespace Service::APT } // namespace Service::APT
namespace Service::NS {
Kernel::SharedPtr<Kernel::Process> LaunchTitle(FS::MediaType media_type, u64 title_id) {
std::string path = AM::GetTitleContentPath(media_type, title_id);
auto loader = Loader::GetLoader(path);
if (!loader) {
LOG_WARNING(Service_NS, "Could not find .app for title 0x{:016x}", title_id);
return nullptr;
}
Kernel::SharedPtr<Kernel::Process> process;
Loader::ResultStatus result = loader->Load(process);
if (result != Loader::ResultStatus::Success) {
LOG_WARNING(Service_NS, "Error loading .app for title 0x{:016x}", title_id);
return nullptr;
}
return process;
}
} // namespace Service::NS

View File

@ -60,21 +60,16 @@ public:
explicit Module(Core::System& system); explicit Module(Core::System& system);
~Module(); ~Module();
class BaseInterface { class NSInterface : public ServiceFramework<NSInterface> {
public:
explicit BaseInterface(std::shared_ptr<Module> apt) : apt(apt) {}
protected:
std::shared_ptr<Module> apt;
};
class NSInterface : public ServiceFramework<NSInterface>, public BaseInterface {
public: public:
NSInterface(std::shared_ptr<Module> apt, const char* name, u32 max_session); NSInterface(std::shared_ptr<Module> apt, const char* name, u32 max_session);
~NSInterface(); ~NSInterface();
private:
std::shared_ptr<Module> apt;
}; };
class APTInterface : public ServiceFramework<APTInterface>, public BaseInterface { class APTInterface : public ServiceFramework<APTInterface> {
public: public:
APTInterface(std::shared_ptr<Module> apt, const char* name, u32 max_session); APTInterface(std::shared_ptr<Module> apt, const char* name, u32 max_session);
~APTInterface(); ~APTInterface();
@ -608,6 +603,7 @@ public:
private: private:
bool application_reset_prepared{}; bool application_reset_prepared{};
std::shared_ptr<Module> apt;
}; };
private: private:
@ -639,8 +635,3 @@ private:
void InstallInterfaces(Core::System& system); void InstallInterfaces(Core::System& system);
} // namespace Service::APT } // namespace Service::APT
namespace Service::NS {
/// Loads and launches the title identified by title_id in the specified media type.
Kernel::SharedPtr<Kernel::Process> LaunchTitle(FS::MediaType media_type, u64 title_id);
} // namespace Service::NS

View File

@ -0,0 +1,33 @@
// Copyright 2017 Citra Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
#include <cinttypes>
#include "core/core.h"
#include "core/hle/service/am/am.h"
#include "core/hle/service/apt/ns.h"
#include "core/loader/loader.h"
namespace Service::NS {
Kernel::SharedPtr<Kernel::Process> LaunchTitle(FS::MediaType media_type, u64 title_id) {
std::string path = AM::GetTitleContentPath(media_type, title_id);
auto loader = Loader::GetLoader(path);
if (!loader) {
LOG_WARNING(Service_NS, "Could not find .app for title 0x{:016x}", title_id);
return nullptr;
}
Kernel::SharedPtr<Kernel::Process> process;
Loader::ResultStatus result = loader->Load(process);
if (result != Loader::ResultStatus::Success) {
LOG_WARNING(Service_NS, "Error loading .app for title 0x{:016x}", title_id);
return nullptr;
}
return process;
}
} // namespace Service::NS

View File

@ -0,0 +1,20 @@
// Copyright 2017 Citra Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
#pragma once
#include "core/hle/kernel/process.h"
#include "core/hle/service/fs/archive.h"
#include "core/hle/service/service.h"
namespace Core {
class System;
}
namespace Service::NS {
/// Loads and launches the title identified by title_id in the specified media type.
Kernel::SharedPtr<Kernel::Process> LaunchTitle(FS::MediaType media_type, u64 title_id);
} // namespace Service::NS