DirectoryBlob: Add ReadFileToVector function
This commit is contained in:
parent
8afa230787
commit
c73f6b6c26
|
@ -35,6 +35,10 @@ static const DiscContent& AddFileToContents(std::set<DiscContent>* contents,
|
||||||
const std::string& path, u64 offset,
|
const std::string& path, u64 offset,
|
||||||
u64 max_size = UINT64_MAX);
|
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 u32 ComputeNameSize(const File::FSTEntry& parent_entry);
|
||||||
static std::string ASCIIToUppercase(std::string str);
|
static std::string ASCIIToUppercase(std::string str);
|
||||||
static void ConvertUTF8NamesToSHIFTJIS(File::FSTEntry& parent_entry);
|
static void ConvertUTF8NamesToSHIFTJIS(File::FSTEntry& parent_entry);
|
||||||
|
@ -271,12 +275,8 @@ u64 DirectoryBlobReader::GetDataSize() const
|
||||||
void DirectoryBlobReader::SetDiscHeaderAndDiscType()
|
void DirectoryBlobReader::SetDiscHeaderAndDiscType()
|
||||||
{
|
{
|
||||||
const std::string boot_bin_path = m_root_directory + "sys/boot.bin";
|
const std::string boot_bin_path = m_root_directory + "sys/boot.bin";
|
||||||
{
|
if (ReadFileToVector(boot_bin_path, &m_disk_header) < 0x20)
|
||||||
File::IOFile boot_bin(boot_bin_path, "rb");
|
ERROR_LOG(DISCIO, "%s doesn't exist or is too small", boot_bin_path.c_str());
|
||||||
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());
|
|
||||||
}
|
|
||||||
|
|
||||||
m_is_wii = Common::swap32(&m_disk_header[0x18]) == 0x5d1c9ea3;
|
m_is_wii = Common::swap32(&m_disk_header[0x18]) == 0x5d1c9ea3;
|
||||||
const bool is_gc = Common::swap32(&m_disk_header[0x1c]) == 0xc2339f3d;
|
const bool is_gc = Common::swap32(&m_disk_header[0x1c]) == 0xc2339f3d;
|
||||||
|
@ -288,15 +288,8 @@ void DirectoryBlobReader::SetDiscHeaderAndDiscType()
|
||||||
if (m_is_wii)
|
if (m_is_wii)
|
||||||
{
|
{
|
||||||
m_disk_header_nonpartition.resize(NONPARTITION_DISKHEADER_SIZE);
|
m_disk_header_nonpartition.resize(NONPARTITION_DISKHEADER_SIZE);
|
||||||
|
const size_t header_bin_bytes_read =
|
||||||
size_t header_bin_bytes_read;
|
ReadFileToVector(m_root_directory + "disc/header.bin", &m_disk_header_nonpartition);
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
// If header.bin is missing or smaller than expected, use the content of sys/boot.bin instead
|
// 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,
|
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);
|
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)
|
static u32 ComputeNameSize(const File::FSTEntry& parent_entry)
|
||||||
{
|
{
|
||||||
u32 name_size = 0;
|
u32 name_size = 0;
|
||||||
|
|
Loading…
Reference in New Issue