From a89ec0eaf9f6fae92d97aabbb18437d8bda7935b Mon Sep 17 00:00:00 2001 From: Stenzek Date: Fri, 28 Jun 2024 13:12:24 +1000 Subject: [PATCH] Achievements: Always recompute state data size on save It can be smaller, or, apparently fail in some cases... --- src/core/achievements.cpp | 31 ++++++++++++++----------------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/src/core/achievements.cpp b/src/core/achievements.cpp index 3d008f7e8..e688da1f6 100644 --- a/src/core/achievements.cpp +++ b/src/core/achievements.cpp @@ -1543,7 +1543,8 @@ bool Achievements::DoState(StateWrapper& sw) return !sw.HasError(); } - s_state_buffer.resize(data_size); + if (data_size > s_state_buffer.size()) + s_state_buffer.resize(data_size); if (data_size > 0) sw.DoBytes(s_state_buffer.data(), data_size); if (sw.HasError()) @@ -1569,7 +1570,7 @@ bool Achievements::DoState(StateWrapper& sw) } else { - u32 data_size; + size_t data_size; #ifdef ENABLE_RAINTEGRATION if (IsUsingRAIntegration()) @@ -1592,23 +1593,19 @@ bool Achievements::DoState(StateWrapper& sw) else #endif { - int result = RC_INSUFFICIENT_BUFFER; - if (!s_state_buffer.empty()) - result = rc_client_serialize_progress_sized(s_client, s_state_buffer.data(), s_state_buffer.size()); - - if (result == RC_INSUFFICIENT_BUFFER) + data_size = rc_client_progress_size(s_client); + if (data_size > 0) { - const size_t size = rc_client_progress_size(s_client); - s_state_buffer.resize(size); - result = rc_client_serialize_progress_sized(s_client, s_state_buffer.data(), s_state_buffer.size()); - } + if (s_state_buffer.size() < data_size) + s_state_buffer.resize(data_size); - data_size = static_cast(s_state_buffer.size()); - if (result != RC_OK) - { - // set data to zero, effectively serializing nothing - WARNING_LOG("Failed to serialize cheevos state ({})", result); - data_size = 0; + const int result = rc_client_serialize_progress_sized(s_client, s_state_buffer.data(), data_size); + if (result != RC_OK) + { + // set data to zero, effectively serializing nothing + WARNING_LOG("Failed to serialize cheevos state ({})", result); + data_size = 0; + } } }