added bytes_read in fread function

This commit is contained in:
georgemoralis 2023-11-20 12:43:24 +02:00
parent 1bc750c88f
commit ee3b9adb45
3 changed files with 20 additions and 14 deletions

View File

@ -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(); return isOpen() && std::fwrite(data.data(), 1, data.size(), m_file) == data.size();
} }
bool File::read(void* data, u64 size) const { bool File::read(void* data, u64 size, u64* bytes_read) const {
return isOpen() && std::fread(data, 1, size, m_file) == size; *bytes_read = std::fread(data, 1, size, m_file);
return isOpen() && *bytes_read == size;
} }
bool File::seek(s64 offset, SeekMode mode) { bool File::seek(s64 offset, SeekMode mode) {

View File

@ -30,20 +30,20 @@ class File {
bool open(const std::string& path, OpenMode mode = OpenMode::Read); bool open(const std::string& path, OpenMode mode = OpenMode::Read);
bool close(); 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 write(std::span<const u08> data);
bool seek(s64 offset, SeekMode mode); bool seek(s64 offset, SeekMode mode);
u64 getFileSize(); u64 getFileSize();
u64 tell() const; u64 tell() const;
template <typename T> template <typename T>
bool read(T& data) const { bool read(T& data, u64* bytes_read) const {
return read(&data, sizeof(T)); return read(&data, sizeof(T),bytes_read);
} }
template <typename T> template <typename T>
bool read(std::vector<T>& data) const { bool read(std::vector<T>& data, u64* bytes_read) const {
return read(data.data(), data.size() * sizeof(T)); return read(data.data(), data.size() * sizeof(T),bytes_read);
} }
bool isOpen() const { bool isOpen() const {

View File

@ -120,17 +120,18 @@ void Elf::Open(const std::string& file_name) {
Reset(); Reset();
m_f.open(file_name, Common::FS::OpenMode::Read); 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) { if (is_self = isSelfFile(); !is_self) {
m_f.seek(0, Common::FS::SeekMode::Set); m_f.seek(0, Common::FS::SeekMode::Set);
} else { } else {
m_self_segments.resize(m_self.segment_count); 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(); const u64 elf_header_pos = m_f.tell();
m_f.read(m_elf_header); m_f.read(m_elf_header, &bytes_read);
if (!isElfFile()) { if (!isElfFile()) {
return; return;
} }
@ -142,7 +143,8 @@ void Elf::Open(const std::string& file_name) {
out.resize(num); out.resize(num);
m_f.seek(offset, Common::FS::SeekMode::Set); 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); 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)) { if (m_elf_header.e_ehsize - header_size >= sizeof(elf_program_id_header)) {
m_f.seek(header_size, Common::FS::SeekMode::Set); 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) { if (!is_self) {
// It's elf file // It's elf file
m_f.seek(file_offset, Common::FS::SeekMode::Set); 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; 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) { if (file_offset >= phdr.p_offset && file_offset < phdr.p_offset + phdr.p_filesz) {
auto offset = file_offset - phdr.p_offset; auto offset = file_offset - phdr.p_offset;
m_f.seek(offset + seg.file_offset, Common::FS::SeekMode::Set); 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; return;
} }
} }