From e7d08b8e8e5dea412b57af0ac7839aec0812d0f6 Mon Sep 17 00:00:00 2001 From: Adrian <78108584+AdrianCassar@users.noreply.github.com> Date: Sun, 23 Nov 2025 15:55:22 +0000 Subject: [PATCH] [XAM] Improved writing struct for XEnumerateCrossTitle --- src/xenia/kernel/xam/apps/xam_app.cc | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/xenia/kernel/xam/apps/xam_app.cc b/src/xenia/kernel/xam/apps/xam_app.cc index 0a3b86371..a5ccb2cdd 100644 --- a/src/xenia/kernel/xam/apps/xam_app.cc +++ b/src/xenia/kernel/xam/apps/xam_app.cc @@ -64,16 +64,32 @@ X_HRESULT XamApp::DispatchMessageSync(uint32_t message, uint32_t buffer_ptr, assert_true(enum_struct->magic == kXObjSignature); - // This is a struct of XCONTENT_DATA_INTERNAL - uint8_t* content_data_ptr = - memory_->TranslateVirtual(data_ptr->buffer_ptr); + XCONTENT_CROSS_TITLE_DATA cross_title_data = {}; + uint8_t* cross_title_data_ptr = + reinterpret_cast(&cross_title_data); + + uint32_t item_count = 0; + X_RESULT result = e->WriteItems(0, cross_title_data_ptr, &item_count); + + XCONTENT_DATA_INTERNAL* content_data_ptr = + memory_->TranslateVirtual( + data_ptr->buffer_ptr); assert_true(data_ptr->buffer_size == sizeof(XCONTENT_DATA_INTERNAL)); std::memset(content_data_ptr, 0, data_ptr->buffer_size); - uint32_t item_count = 0; - X_RESULT result = e->WriteItems(0, content_data_ptr, &item_count); + if (!result) { + content_data_ptr->device_id = cross_title_data.content_data.device_id; + content_data_ptr->content_type = + cross_title_data.content_data.content_type; + content_data_ptr->set_display_name( + cross_title_data.content_data.display_name()); + content_data_ptr->set_file_name( + cross_title_data.content_data.file_name()); + content_data_ptr->padding[0] = content_data_ptr->padding[1] = 0; + content_data_ptr->title_id = cross_title_data.title_id; + } result = X_HRESULT_FROM_WIN32(result);