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,6 +1543,7 @@ bool Achievements::DoState(StateWrapper& sw)
return !sw.HasError();
}
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);
@ -1569,7 +1570,7 @@ bool Achievements::DoState(StateWrapper& sw)
}
else
{
u32 data_size;
size_t data_size;
#ifdef ENABLE_RAINTEGRATION
if (IsUsingRAIntegration())
@ -1592,18 +1593,13 @@ 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<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)
{
// set data to zero, effectively serializing nothing
@ -1611,6 +1607,7 @@ bool Achievements::DoState(StateWrapper& sw)
data_size = 0;
}
}
}
sw.Do(&data_size);
if (data_size > 0)