mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-03-12 22:14:58 +00:00
Savestates: Add errored state for compressed stream
This commit is contained in:
parent
a0b521ba8e
commit
fdb2fecd45
@ -459,6 +459,7 @@ void compressed_serialization_file_handler::initialize(utils::serial& ar)
|
|||||||
#pragma GCC diagnostic pop
|
#pragma GCC diagnostic pop
|
||||||
#endif
|
#endif
|
||||||
m_write_inited = true;
|
m_write_inited = true;
|
||||||
|
m_errored = false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -482,6 +483,7 @@ void compressed_serialization_file_handler::initialize(utils::serial& ar)
|
|||||||
#endif
|
#endif
|
||||||
ensure(inflateInit2(&m_zs, 16 + 15) == Z_OK);
|
ensure(inflateInit2(&m_zs, 16 + 15) == Z_OK);
|
||||||
m_read_inited = true;
|
m_read_inited = true;
|
||||||
|
m_errored = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -491,6 +493,11 @@ bool compressed_serialization_file_handler::handle_file_op(utils::serial& ar, us
|
|||||||
{
|
{
|
||||||
initialize(ar);
|
initialize(ar);
|
||||||
|
|
||||||
|
if (m_errored)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
z_stream& m_zs = std::any_cast<z_stream&>(m_stream);
|
z_stream& m_zs = std::any_cast<z_stream&>(m_stream);
|
||||||
|
|
||||||
if (data)
|
if (data)
|
||||||
@ -512,6 +519,7 @@ bool compressed_serialization_file_handler::handle_file_op(utils::serial& ar, us
|
|||||||
|
|
||||||
if (deflate(&m_zs, Z_NO_FLUSH) == Z_STREAM_ERROR || m_file->write(m_stream_data.data(), m_stream_data.size() - m_zs.avail_out) != m_stream_data.size() - m_zs.avail_out)
|
if (deflate(&m_zs, Z_NO_FLUSH) == Z_STREAM_ERROR || m_file->write(m_stream_data.data(), m_stream_data.size() - m_zs.avail_out) != m_stream_data.size() - m_zs.avail_out)
|
||||||
{
|
{
|
||||||
|
m_errored = true;
|
||||||
deflateEnd(&m_zs);
|
deflateEnd(&m_zs);
|
||||||
//m_file->close();
|
//m_file->close();
|
||||||
break;
|
break;
|
||||||
@ -534,6 +542,11 @@ bool compressed_serialization_file_handler::handle_file_op(utils::serial& ar, us
|
|||||||
|
|
||||||
initialize(ar);
|
initialize(ar);
|
||||||
|
|
||||||
|
if (m_errored)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (!size)
|
if (!size)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
@ -625,7 +638,7 @@ usz compressed_serialization_file_handler::read_at(utils::serial& ar, usz read_p
|
|||||||
{
|
{
|
||||||
ensure(read_pos == ar.data.size() + ar.data_offset - size);
|
ensure(read_pos == ar.data.size() + ar.data_offset - size);
|
||||||
|
|
||||||
if (!size)
|
if (!size || m_errored)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -674,8 +687,10 @@ usz compressed_serialization_file_handler::read_at(utils::serial& ar, usz read_p
|
|||||||
[[fallthrough]];
|
[[fallthrough]];
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
m_errored = true;
|
||||||
inflateEnd(&m_zs);
|
inflateEnd(&m_zs);
|
||||||
m_read_inited = false;
|
m_read_inited = false;
|
||||||
|
sys_log.error("Failure of compressed data reading. (res=%d, read_size=0x%x, avail_in=0x%x, avail_out=0x%x, ar=%s)", res, read_size, m_zs.avail_in, m_zs.avail_out, ar);
|
||||||
return read_size;
|
return read_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,6 +66,7 @@ struct compressed_serialization_file_handler : utils::serialization_file_handler
|
|||||||
usz m_file_read_index = 0;
|
usz m_file_read_index = 0;
|
||||||
bool m_write_inited = false;
|
bool m_write_inited = false;
|
||||||
bool m_read_inited = false;
|
bool m_read_inited = false;
|
||||||
|
bool m_errored = false;
|
||||||
std::any m_stream;
|
std::any m_stream;
|
||||||
|
|
||||||
explicit compressed_serialization_file_handler(fs::file&& file) noexcept
|
explicit compressed_serialization_file_handler(fs::file&& file) noexcept
|
||||||
|
Loading…
x
Reference in New Issue
Block a user