mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-02-15 16:59:18 +01:00
VolumeVerifier: Report read errors to the user
This commit is contained in:
parent
ea9b96370d
commit
de26fec0af
@ -1114,36 +1114,38 @@ void VolumeVerifier::Process()
|
|||||||
const bool is_data_needed = m_calculating_any_hash || content_read || block_read;
|
const bool is_data_needed = m_calculating_any_hash || content_read || block_read;
|
||||||
const bool read_succeeded = is_data_needed && ReadChunkAndWaitForAsyncOperations(bytes_to_read);
|
const bool read_succeeded = is_data_needed && ReadChunkAndWaitForAsyncOperations(bytes_to_read);
|
||||||
|
|
||||||
|
if (!read_succeeded)
|
||||||
|
{
|
||||||
|
ERROR_LOG(DISCIO, "Read failed at 0x%" PRIx64 " to 0x%" PRIx64, m_progress,
|
||||||
|
m_progress + bytes_to_read);
|
||||||
|
|
||||||
|
m_read_errors_occurred = true;
|
||||||
|
m_calculating_any_hash = false;
|
||||||
|
}
|
||||||
|
|
||||||
if (m_calculating_any_hash)
|
if (m_calculating_any_hash)
|
||||||
{
|
{
|
||||||
if (!read_succeeded)
|
if (m_hashes_to_calculate.crc32)
|
||||||
{
|
{
|
||||||
m_calculating_any_hash = false;
|
m_crc32_future = std::async(std::launch::async, [this] {
|
||||||
|
// It would be nice to use crc32_z here instead of crc32, but it isn't available on Android
|
||||||
|
m_crc32_context =
|
||||||
|
crc32(m_crc32_context, m_data.data(), static_cast<unsigned int>(m_data.size()));
|
||||||
|
});
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
if (m_hashes_to_calculate.md5)
|
||||||
{
|
{
|
||||||
if (m_hashes_to_calculate.crc32)
|
m_md5_future = std::async(std::launch::async, [this] {
|
||||||
{
|
mbedtls_md5_update_ret(&m_md5_context, m_data.data(), m_data.size());
|
||||||
m_crc32_future = std::async(std::launch::async, [this] {
|
});
|
||||||
// Would be nice to use crc32_z here instead of crc32, but it isn't available on Android
|
}
|
||||||
m_crc32_context =
|
|
||||||
crc32(m_crc32_context, m_data.data(), static_cast<unsigned int>(m_data.size()));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_hashes_to_calculate.md5)
|
if (m_hashes_to_calculate.sha1)
|
||||||
{
|
{
|
||||||
m_md5_future = std::async(std::launch::async, [this] {
|
m_sha1_future = std::async(std::launch::async, [this] {
|
||||||
mbedtls_md5_update_ret(&m_md5_context, m_data.data(), m_data.size());
|
mbedtls_sha1_update_ret(&m_sha1_context, m_data.data(), m_data.size());
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
|
||||||
if (m_hashes_to_calculate.sha1)
|
|
||||||
{
|
|
||||||
m_sha1_future = std::async(std::launch::async, [this] {
|
|
||||||
mbedtls_sha1_update_ret(&m_sha1_context, m_data.data(), m_data.size());
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1262,6 +1264,9 @@ void VolumeVerifier::Finish()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_read_errors_occurred)
|
||||||
|
AddProblem(Severity::Medium, Common::GetStringT("Some of the data could not be read."));
|
||||||
|
|
||||||
if (IsDisc(m_volume.GetVolumeType()) &&
|
if (IsDisc(m_volume.GetVolumeType()) &&
|
||||||
(m_volume.IsSizeAccurate() || m_volume.SupportsIntegrityCheck()))
|
(m_volume.IsSizeAccurate() || m_volume.SupportsIntegrityCheck()))
|
||||||
{
|
{
|
||||||
|
@ -174,6 +174,8 @@ private:
|
|||||||
bool m_redump_verification;
|
bool m_redump_verification;
|
||||||
RedumpVerifier m_redump_verifier;
|
RedumpVerifier m_redump_verifier;
|
||||||
|
|
||||||
|
bool m_read_errors_occurred = false;
|
||||||
|
|
||||||
Hashes<bool> m_hashes_to_calculate{};
|
Hashes<bool> m_hashes_to_calculate{};
|
||||||
bool m_calculating_any_hash = false;
|
bool m_calculating_any_hash = false;
|
||||||
unsigned long m_crc32_context = 0;
|
unsigned long m_crc32_context = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user