mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-07-23 10:35:03 +00:00
added bytes_read in fread function
This commit is contained in:
parent
1bc750c88f
commit
ee3b9adb45
@ -36,8 +36,9 @@ bool File::write(std::span<const u08> data) {
|
||||
return isOpen() && std::fwrite(data.data(), 1, data.size(), m_file) == data.size();
|
||||
}
|
||||
|
||||
bool File::read(void* data, u64 size) const {
|
||||
return isOpen() && std::fread(data, 1, size, m_file) == size;
|
||||
bool File::read(void* data, u64 size, u64* bytes_read) const {
|
||||
*bytes_read = std::fread(data, 1, size, m_file);
|
||||
return isOpen() && *bytes_read == size;
|
||||
}
|
||||
|
||||
bool File::seek(s64 offset, SeekMode mode) {
|
||||
|
@ -30,20 +30,20 @@ class File {
|
||||
|
||||
bool open(const std::string& path, OpenMode mode = OpenMode::Read);
|
||||
bool close();
|
||||
bool read(void* data, u64 size) const;
|
||||
bool read(void* data, u64 size, u64* bytes_read) const;
|
||||
bool write(std::span<const u08> data);
|
||||
bool seek(s64 offset, SeekMode mode);
|
||||
u64 getFileSize();
|
||||
u64 tell() const;
|
||||
|
||||
template <typename T>
|
||||
bool read(T& data) const {
|
||||
return read(&data, sizeof(T));
|
||||
bool read(T& data, u64* bytes_read) const {
|
||||
return read(&data, sizeof(T),bytes_read);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
bool read(std::vector<T>& data) const {
|
||||
return read(data.data(), data.size() * sizeof(T));
|
||||
bool read(std::vector<T>& data, u64* bytes_read) const {
|
||||
return read(data.data(), data.size() * sizeof(T),bytes_read);
|
||||
}
|
||||
|
||||
bool isOpen() const {
|
||||
|
@ -120,17 +120,18 @@ void Elf::Open(const std::string& file_name) {
|
||||
Reset();
|
||||
|
||||
m_f.open(file_name, Common::FS::OpenMode::Read);
|
||||
m_f.read(m_self);
|
||||
u64 bytes_read = 0;
|
||||
m_f.read(m_self, &bytes_read);
|
||||
|
||||
if (is_self = isSelfFile(); !is_self) {
|
||||
m_f.seek(0, Common::FS::SeekMode::Set);
|
||||
} else {
|
||||
m_self_segments.resize(m_self.segment_count);
|
||||
m_f.read(m_self_segments);
|
||||
m_f.read(m_self_segments, &bytes_read);
|
||||
}
|
||||
|
||||
const u64 elf_header_pos = m_f.tell();
|
||||
m_f.read(m_elf_header);
|
||||
m_f.read(m_elf_header, &bytes_read);
|
||||
if (!isElfFile()) {
|
||||
return;
|
||||
}
|
||||
@ -142,7 +143,8 @@ void Elf::Open(const std::string& file_name) {
|
||||
|
||||
out.resize(num);
|
||||
m_f.seek(offset, Common::FS::SeekMode::Set);
|
||||
m_f.read(out);
|
||||
u64 bytes_read = 0;
|
||||
m_f.read(out, &bytes_read);
|
||||
};
|
||||
|
||||
load_headers(m_elf_phdr, elf_header_pos + m_elf_header.e_phoff, m_elf_header.e_phnum);
|
||||
@ -160,7 +162,8 @@ void Elf::Open(const std::string& file_name) {
|
||||
|
||||
if (m_elf_header.e_ehsize - header_size >= sizeof(elf_program_id_header)) {
|
||||
m_f.seek(header_size, Common::FS::SeekMode::Set);
|
||||
m_f.read(m_self_id_header);
|
||||
u64 bytes_read = 0;
|
||||
m_f.read(m_self_id_header,&bytes_read);
|
||||
}
|
||||
}
|
||||
|
||||
@ -412,7 +415,8 @@ void Elf::LoadSegment(u64 virtual_addr, u64 file_offset, u64 size) {
|
||||
if (!is_self) {
|
||||
// It's elf file
|
||||
m_f.seek(file_offset, Common::FS::SeekMode::Set);
|
||||
m_f.read(reinterpret_cast<void*>(static_cast<uintptr_t>(virtual_addr)), size);
|
||||
u64 bytes_read = 0;
|
||||
m_f.read(reinterpret_cast<void*>(static_cast<uintptr_t>(virtual_addr)), size,&bytes_read);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -426,7 +430,8 @@ void Elf::LoadSegment(u64 virtual_addr, u64 file_offset, u64 size) {
|
||||
if (file_offset >= phdr.p_offset && file_offset < phdr.p_offset + phdr.p_filesz) {
|
||||
auto offset = file_offset - phdr.p_offset;
|
||||
m_f.seek(offset + seg.file_offset, Common::FS::SeekMode::Set);
|
||||
m_f.read(reinterpret_cast<void*>(static_cast<uintptr_t>(virtual_addr)), size);
|
||||
u64 bytes_read = 0;
|
||||
m_f.read(reinterpret_cast<void*>(static_cast<uintptr_t>(virtual_addr)), size, &bytes_read);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user