Achievements: Always recompute state data size on save

It can be smaller, or, apparently fail in some cases...
This commit is contained in:
Stenzek 2024-06-28 13:12:24 +10:00
parent 5c94ab9f22
commit a89ec0eaf9
No known key found for this signature in database

View file

@ -1543,7 +1543,8 @@ bool Achievements::DoState(StateWrapper& sw)
return !sw.HasError(); 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) if (data_size > 0)
sw.DoBytes(s_state_buffer.data(), data_size); sw.DoBytes(s_state_buffer.data(), data_size);
if (sw.HasError()) if (sw.HasError())
@ -1569,7 +1570,7 @@ bool Achievements::DoState(StateWrapper& sw)
} }
else else
{ {
u32 data_size; size_t data_size;
#ifdef ENABLE_RAINTEGRATION #ifdef ENABLE_RAINTEGRATION
if (IsUsingRAIntegration()) if (IsUsingRAIntegration())
@ -1592,23 +1593,19 @@ bool Achievements::DoState(StateWrapper& sw)
else else
#endif #endif
{ {
int result = RC_INSUFFICIENT_BUFFER; data_size = rc_client_progress_size(s_client);
if (!s_state_buffer.empty()) if (data_size > 0)
result = rc_client_serialize_progress_sized(s_client, s_state_buffer.data(), s_state_buffer.size());
if (result == RC_INSUFFICIENT_BUFFER)
{ {
const size_t size = rc_client_progress_size(s_client); if (s_state_buffer.size() < data_size)
s_state_buffer.resize(size); s_state_buffer.resize(data_size);
result = rc_client_serialize_progress_sized(s_client, s_state_buffer.data(), s_state_buffer.size());
}
data_size = static_cast<u32>(s_state_buffer.size()); const int result = rc_client_serialize_progress_sized(s_client, s_state_buffer.data(), data_size);
if (result != RC_OK) if (result != RC_OK)
{ {
// set data to zero, effectively serializing nothing // set data to zero, effectively serializing nothing
WARNING_LOG("Failed to serialize cheevos state ({})", result); WARNING_LOG("Failed to serialize cheevos state ({})", result);
data_size = 0; data_size = 0;
}
} }
} }