mirror of
https://github.com/RPCS3/rpcs3.git
synced 2026-05-12 16:19:44 -06:00
Fix missing read of remaining chunk of data on next extent, if present
This commit is contained in:
parent
3c2815e89c
commit
7b60c6385c
@ -623,13 +623,14 @@ u64 iso_file_encrypted::read_at(u64 offset, void* buffer, u64 size)
|
||||
// ' ' ' '
|
||||
// | first sec | inner sec(s) | last sec |
|
||||
|
||||
const u64 max_size = std::min(size, local_extent_remaining(offset));
|
||||
u64 max_size = std::min(size, local_extent_remaining(offset));
|
||||
|
||||
if (max_size == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
const u64 total_size = this->size();
|
||||
const u64 archive_first_offset = file_offset(offset);
|
||||
const u64 archive_last_offset = archive_first_offset + max_size - 1;
|
||||
iso_sector first_sec, last_sec;
|
||||
@ -682,6 +683,13 @@ u64 iso_file_encrypted::read_at(u64 offset, void* buffer, u64 size)
|
||||
return 0;
|
||||
}
|
||||
|
||||
// If present, read the remaining chunk of data on next extent
|
||||
if (size > max_size && (offset + max_size) < total_size)
|
||||
{
|
||||
iso_log.warning("read_at: %s: Extent limit reached reading from file (%llu/%llu)", m_meta.name, max_size, size);
|
||||
max_size += read_at(offset + max_size, &reinterpret_cast<u8*>(buffer)[max_size], size - max_size);
|
||||
}
|
||||
|
||||
return max_size;
|
||||
}
|
||||
|
||||
@ -745,6 +753,13 @@ u64 iso_file_encrypted::read_at(u64 offset, void* buffer, u64 size)
|
||||
return 0;
|
||||
}
|
||||
|
||||
// If present, read the remaining chunk of data on next extent
|
||||
if (size > max_size && (offset + max_size) < total_size)
|
||||
{
|
||||
iso_log.warning("read_at: %s: Extent limit reached reading from file (%llu/%llu)", m_meta.name, max_size, size);
|
||||
max_size += read_at(offset + max_size, &reinterpret_cast<u8*>(buffer)[max_size], size - max_size);
|
||||
}
|
||||
|
||||
return max_size;
|
||||
}
|
||||
|
||||
@ -1250,13 +1265,14 @@ u64 iso_file::read(void* buffer, u64 size)
|
||||
|
||||
u64 iso_file::read_at(u64 offset, void* buffer, u64 size)
|
||||
{
|
||||
const u64 max_size = std::min(size, local_extent_remaining(offset));
|
||||
u64 max_size = std::min(size, local_extent_remaining(offset));
|
||||
|
||||
if (max_size == 0)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
const u64 total_size = this->size();
|
||||
const u64 archive_first_offset = file_offset(offset);
|
||||
|
||||
// If it's not a raw device
|
||||
@ -1270,6 +1286,13 @@ u64 iso_file::read_at(u64 offset, void* buffer, u64 size)
|
||||
return 0;
|
||||
}
|
||||
|
||||
// If present, read the remaining chunk of data on next extent
|
||||
if (size > max_size && (offset + max_size) < total_size)
|
||||
{
|
||||
iso_log.warning("read_at: %s: Extent limit reached reading from file (%llu/%llu)", m_meta.name, max_size, size);
|
||||
max_size += read_at(offset + max_size, &reinterpret_cast<u8*>(buffer)[max_size], size - max_size);
|
||||
}
|
||||
|
||||
return max_size;
|
||||
}
|
||||
|
||||
@ -1324,6 +1347,13 @@ u64 iso_file::read_at(u64 offset, void* buffer, u64 size)
|
||||
return 0;
|
||||
}
|
||||
|
||||
// If present, read the remaining chunk of data on next extent
|
||||
if (size > max_size && (offset + max_size) < total_size)
|
||||
{
|
||||
iso_log.warning("read_at: %s: Extent limit reached reading from file (%llu/%llu)", m_meta.name, max_size, size);
|
||||
max_size += read_at(offset + max_size, &reinterpret_cast<u8*>(buffer)[max_size], size - max_size);
|
||||
}
|
||||
|
||||
return max_size;
|
||||
}
|
||||
|
||||
@ -1363,6 +1393,13 @@ u64 iso_file::read_at(u64 offset, void* buffer, u64 size)
|
||||
return 0;
|
||||
}
|
||||
|
||||
// If present, read the remaining chunk of data on next extent
|
||||
if (size > max_size && (offset + max_size) < total_size)
|
||||
{
|
||||
iso_log.warning("read_at: %s: Extent limit reached reading from file (%llu/%llu)", m_meta.name, max_size, size);
|
||||
max_size += read_at(offset + max_size, &reinterpret_cast<u8*>(buffer)[max_size], size - max_size);
|
||||
}
|
||||
|
||||
return max_size;
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user