[XAM] Simplified loader_data structure.

- Removed launch_data_present replaced with empty check

Fixed regression introduced in 269ee61845
This commit is contained in:
Gliniak
2026-06-23 20:58:28 +02:00
parent 9c8e34b29e
commit 2771366b8b
4 changed files with 3 additions and 8 deletions

View File

@@ -762,7 +762,7 @@ void EmulatorApp::EmulatorThread() {
if (xam) { if (xam) {
xam->LoadLoaderData(); xam->LoadLoaderData();
if (xam->loader_data().launch_data_present) { if (!xam->loader_data().host_path.empty()) {
const std::filesystem::path host_path = xam->loader_data().host_path; const std::filesystem::path host_path = xam->loader_data().host_path;
app_context().CallInUIThread([this, host_path]() { app_context().CallInUIThread([this, host_path]() {
return emulator_window_->RunTitle(host_path); return emulator_window_->RunTitle(host_path);

View File

@@ -247,7 +247,6 @@ DECLARE_XAM_EXPORT1(XamGetExecutionId, kNone, kImplemented);
dword_result_t XamLoaderSetLaunchData_entry(lpvoid_t data, dword_t size) { dword_result_t XamLoaderSetLaunchData_entry(lpvoid_t data, dword_t size) {
auto xam = kernel_state()->GetKernelModule<XamModule>("xam.xex"); auto xam = kernel_state()->GetKernelModule<XamModule>("xam.xex");
auto& loader_data = xam->loader_data(); auto& loader_data = xam->loader_data();
loader_data.launch_data_present = size ? true : false;
loader_data.launch_data.resize(size); loader_data.launch_data.resize(size);
std::memcpy(loader_data.launch_data.data(), data, size); std::memcpy(loader_data.launch_data.data(), data, size);
return 0; return 0;
@@ -275,7 +274,7 @@ dword_result_t XamLoaderGetLaunchData_entry(lpvoid_t buffer_ptr,
dword_t buffer_size) { dword_t buffer_size) {
auto xam = kernel_state()->GetKernelModule<XamModule>("xam.xex"); auto xam = kernel_state()->GetKernelModule<XamModule>("xam.xex");
auto& loader_data = xam->loader_data(); auto& loader_data = xam->loader_data();
if (!buffer_size) { if (loader_data.launch_data.empty()) {
return X_ERROR_NOT_FOUND; return X_ERROR_NOT_FOUND;
} }
@@ -298,7 +297,6 @@ void XamLoaderLaunchTitle_entry(lpstring_t raw_name_ptr, dword_t flags) {
// Translate the launch path to a full path. // Translate the launch path to a full path.
if (raw_name_ptr && !raw_name_ptr.value().empty()) { if (raw_name_ptr && !raw_name_ptr.value().empty()) {
loader_data.launch_path = xe::path_to_utf8(raw_name_ptr.value()); loader_data.launch_path = xe::path_to_utf8(raw_name_ptr.value());
loader_data.launch_data_present = true;
xam->SaveLoaderData(); xam->SaveLoaderData();
title = "Title was restarted"; title = "Title was restarted";
message = message =

View File

@@ -66,12 +66,10 @@ void XamModule::LoadLoaderData() {
FILE* file = xe::filesystem::OpenFile(kXamModuleLoaderDataFileName, "rb"); FILE* file = xe::filesystem::OpenFile(kXamModuleLoaderDataFileName, "rb");
if (!file) { if (!file) {
loader_data_.launch_data_present = false; loader_data_.launch_data.clear();
return; return;
} }
loader_data_.launch_data_present = true;
auto string_read = [file]() { auto string_read = [file]() {
uint16_t string_size = 0; uint16_t string_size = 0;
fread(&string_size, sizeof(string_size), 1, file); fread(&string_size, sizeof(string_size), 1, file);

View File

@@ -31,7 +31,6 @@ class XamModule : public KernelModule {
static void RegisterExportTable(xe::cpu::ExportResolver* export_resolver); static void RegisterExportTable(xe::cpu::ExportResolver* export_resolver);
struct LoaderData { struct LoaderData {
bool launch_data_present = false;
std::string host_path; // Full host path to next title to load std::string host_path; // Full host path to next title to load
std::string std::string
launch_path; // Full guest path to next xex. might be default.xex launch_path; // Full guest path to next xex. might be default.xex