From 912b00335ceecc92bd4be9828d10f9b2f504eb24 Mon Sep 17 00:00:00 2001 From: Cancerous Date: Thu, 5 Dec 2019 09:33:30 -0500 Subject: [PATCH] [Kernel] - adjusting XAMEnumerate buffer size to fix Angry Birds and Resonance of Fate - thanks Gliniak --- src/xenia/kernel/xam/xam_info.cc | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/xenia/kernel/xam/xam_info.cc b/src/xenia/kernel/xam/xam_info.cc index 7cf555f5f..2d8521998 100644 --- a/src/xenia/kernel/xam/xam_info.cc +++ b/src/xenia/kernel/xam/xam_info.cc @@ -361,18 +361,23 @@ dword_result_t XamEnumerate(dword_t handle, dword_t flags, lpvoid_t buffer, } } - size_t actual_buffer_length = (uint32_t)buffer_length; - if (buffer_length == e->items_per_enumerate()) { - actual_buffer_length = e->item_size() * e->items_per_enumerate(); - // Known culprits: - // Final Fight: Double Impact (saves) - XELOGW( - "Broken usage of XamEnumerate! buffer length=%.X vs actual length=%.X " - "(item size=%.X, items per enumerate=%u)", - (uint32_t)buffer_length, actual_buffer_length, e->item_size(), - e->items_per_enumerate()); - } + // size_t actual_buffer_length = (uint32_t)buffer_length; + // if (buffer_length == e->items_per_enumerate()) { + // // Known culprits: + // // Final Fight: Double Impact (saves) + // XELOGW( + // "Broken usage of XamEnumerate! buffer length=%.X vs actual length=%.X " + // "(item size=%.X, items per enumerate=%u)", + // (uint32_t)buffer_length, actual_buffer_length, e->item_size(), + // e->items_per_enumerate()); + // actual_buffer_length = e->item_size() * e->items_per_enumerate(); + // } + // leaving old method commented for now until more widely tested + // Don't trust buffer_length. It might be invalid (Based on "Resonance of fate") + // also fixes "Angry Birds" - Thanks Gliniak + size_t actual_buffer_length = e->item_count() * e->item_size(); + buffer.Zero(actual_buffer_length); X_RESULT result;