diff --git a/Core/ELF/PBPReader.cpp b/Core/ELF/PBPReader.cpp index 06a17d98d5f7..48a9aadf49e1 100644 --- a/Core/ELF/PBPReader.cpp +++ b/Core/ELF/PBPReader.cpp @@ -24,16 +24,14 @@ #include "Core/ELF/PBPReader.h" PBPReader::PBPReader(const char *filename) : header_(), isELF_(false) { - file_ = File::OpenCFile(filename, "rb"); - if (!file_) { + if (!File::OpenCPPFile(file_, filename, std::ios::in | std::ios::binary | std::ios::ate)) { ERROR_LOG(LOADER, "Failed to open PBP file %s", filename); return; } - fseek(file_, 0, SEEK_END); - fileSize_ = ftell(file_); - fseek(file_, 0, SEEK_SET); - fread((char *)&header_, 1, sizeof(header_), file_); + fileSize_ = file_.tellg(); + file_.seekg(0, std::ios::beg); + file_.read((char*)&header_, sizeof(header_)); if (memcmp(header_.magic, "\0PBP", 4) != 0) { if (memcmp(header_.magic, "\nFLE", 4) != 0) { DEBUG_LOG(LOADER, "%s: File actually an ELF, not a PBP", filename); @@ -41,29 +39,23 @@ PBPReader::PBPReader(const char *filename) : header_(), isELF_(false) { } else { ERROR_LOG(LOADER, "Magic number in %s indicated no PBP: %s", filename, header_.magic); } - fclose(file_); - file_ = 0; - return; + file_.close(); + } else { + DEBUG_LOG(LOADER, "Loading PBP, version = %08x", header_.version); } - - DEBUG_LOG(LOADER, "Loading PBP, version = %08x", header_.version); } u8 *PBPReader::GetSubFile(PBPSubFile file, size_t *outSize) { *outSize = GetSubFileSize(file); u8 *buffer = new u8[*outSize]; - fseek(file_, header_.offsets[(int)file], SEEK_SET); - fread(buffer, 1, *outSize, file_); + file_.seekg(header_.offsets[(int)file], std::ios::beg); + file_.read((char*)buffer, *outSize); return buffer; } void PBPReader::GetSubFileAsString(PBPSubFile file, std::string *out) { out->resize(GetSubFileSize(file)); - fseek(file_, header_.offsets[(int)file], SEEK_SET); - fread((void *)out->data(), 1, out->size(), file_); + file_.seekg(header_.offsets[(int)file], std::ios::beg); + file_.read((char*)out->data(), out->size()); } -PBPReader::~PBPReader() { - if (file_) - fclose(file_); -} diff --git a/Core/ELF/PBPReader.h b/Core/ELF/PBPReader.h index ab68ea73ba4e..2243b2772dbb 100644 --- a/Core/ELF/PBPReader.h +++ b/Core/ELF/PBPReader.h @@ -18,6 +18,7 @@ #pragma once +#include #include "Common/Common.h" enum PBPSubFile { @@ -40,18 +41,16 @@ struct PBPHeader { class PBPReader { public: PBPReader(const char *filename); - ~PBPReader(); - bool IsValid() const { return file_ != 0; } - bool IsELF() const { return file_ == 0 && isELF_; } + bool IsValid() const { return file_.rdbuf()->is_open(); } + bool IsELF() const { return !IsValid() && isELF_; } // Delete the returned buffer with delete []. u8 *GetSubFile(PBPSubFile file, size_t *outSize); void GetSubFileAsString(PBPSubFile file, std::string *out); size_t GetSubFileSize(PBPSubFile file) { - int num = (int)file; - if (num < 7) { + if (file < PBP_UNKNOWN_PSAR) { return header_.offsets[file + 1] - header_.offsets[file]; } else { return fileSize_ - header_.offsets[file]; @@ -59,7 +58,7 @@ class PBPReader { } private: - FILE *file_; + std::fstream file_; size_t fileSize_; const PBPHeader header_; bool isELF_;