DirectoryBlob: Add ReadFileToVector function

This commit is contained in:
JosJuice 2017-06-10 08:46:21 +02:00
parent 8afa230787
commit c73f6b6c26
1 changed files with 16 additions and 15 deletions

View File

@ -35,6 +35,10 @@ static const DiscContent& AddFileToContents(std::set<DiscContent>* contents,
const std::string& path, u64 offset,
u64 max_size = UINT64_MAX);
// Reads as many bytes as the vector fits (or less, if the file is smaller).
// Returns the number of bytes read.
static size_t ReadFileToVector(const std::string& path, std::vector<u8>* vector);
static u32 ComputeNameSize(const File::FSTEntry& parent_entry);
static std::string ASCIIToUppercase(std::string str);
static void ConvertUTF8NamesToSHIFTJIS(File::FSTEntry& parent_entry);
@ -271,12 +275,8 @@ u64 DirectoryBlobReader::GetDataSize() const
void DirectoryBlobReader::SetDiscHeaderAndDiscType()
{
const std::string boot_bin_path = m_root_directory + "sys/boot.bin";
{
File::IOFile boot_bin(boot_bin_path, "rb");
const u64 bytes_to_read = std::min<u64>(boot_bin.GetSize(), m_disk_header.size());
if (!boot_bin.ReadBytes(m_disk_header.data(), bytes_to_read))
ERROR_LOG(DISCIO, "Failed to read %s", boot_bin_path.c_str());
}
if (ReadFileToVector(boot_bin_path, &m_disk_header) < 0x20)
ERROR_LOG(DISCIO, "%s doesn't exist or is too small", boot_bin_path.c_str());
m_is_wii = Common::swap32(&m_disk_header[0x18]) == 0x5d1c9ea3;
const bool is_gc = Common::swap32(&m_disk_header[0x1c]) == 0xc2339f3d;
@ -288,15 +288,8 @@ void DirectoryBlobReader::SetDiscHeaderAndDiscType()
if (m_is_wii)
{
m_disk_header_nonpartition.resize(NONPARTITION_DISKHEADER_SIZE);
size_t header_bin_bytes_read;
const std::string header_bin_path = m_root_directory + "disc/header.bin";
{
File::IOFile header_bin(header_bin_path, "rb");
const u64 bytes_to_read = std::min(header_bin.GetSize(), NONPARTITION_DISKHEADER_SIZE);
header_bin.ReadArray<u8>(m_disk_header_nonpartition.data(), bytes_to_read,
&header_bin_bytes_read);
}
const size_t header_bin_bytes_read =
ReadFileToVector(m_root_directory + "disc/header.bin", &m_disk_header_nonpartition);
// If header.bin is missing or smaller than expected, use the content of sys/boot.bin instead
std::copy(m_disk_header.data() + header_bin_bytes_read,
@ -486,6 +479,14 @@ static const DiscContent& AddFileToContents(std::set<DiscContent>* contents,
return *(contents->emplace(offset, std::min(File::GetSize(path), max_size), path).first);
}
static size_t ReadFileToVector(const std::string& path, std::vector<u8>* vector)
{
File::IOFile file(path, "rb");
size_t bytes_read;
file.ReadArray<u8>(vector->data(), std::min<u64>(file.GetSize(), vector->size()), &bytes_read);
return bytes_read;
}
static u32 ComputeNameSize(const File::FSTEntry& parent_entry)
{
u32 name_size = 0;