VolumeGC::ConvertedGCBanner VolumeGC::LoadBannerFile() const { GCBanner banner_file; const u64 file_size = ReadFile(*this, PARTITION_NONE, "opening.bnr", reinterpret_cast<u8*>(&banner_file), sizeof(GCBanner)); if (file_size < 4) { WARN_LOG(DISCIO, "Could not read opening.bnr."); return {}; // Return early so that we don't access the uninitialized banner_file.id } constexpr u32 BNR1_MAGIC = 0x31524e42; constexpr u32 BNR2_MAGIC = 0x32524e42; bool is_bnr1; if (banner_file.id == BNR1_MAGIC && file_size == BNR1_SIZE) { is_bnr1 = true; } else if (banner_file.id == BNR2_MAGIC && file_size == BNR2_SIZE) { is_bnr1 = false; } else { WARN_LOG(DISCIO, "Invalid opening.bnr. Type: %0x Size: %0" PRIx64, banner_file.id, file_size); return {}; } return ExtractBannerInformation(banner_file, is_bnr1); }
void CVolumeGC::LoadBannerFile() const { // If opening.bnr has been loaded already, return immediately if (m_banner_loaded) return; m_banner_loaded = true; GCBanner banner_file; std::unique_ptr<IFileSystem> file_system(CreateFileSystem(this)); size_t file_size = (size_t)file_system->GetFileSize("opening.bnr"); constexpr int BNR1_MAGIC = 0x31524e42; constexpr int BNR2_MAGIC = 0x32524e42; if (file_size != BNR1_SIZE && file_size != BNR2_SIZE) { WARN_LOG(DISCIO, "Invalid opening.bnr. Size: %0zx", file_size); return; } file_system->ReadFile("opening.bnr", reinterpret_cast<u8*>(&banner_file), file_size); bool is_bnr1; if (banner_file.id == BNR1_MAGIC && file_size == BNR1_SIZE) { is_bnr1 = true; } else if (banner_file.id == BNR2_MAGIC && file_size == BNR2_SIZE) { is_bnr1 = false; } else { WARN_LOG(DISCIO, "Invalid opening.bnr. Type: %0x Size: %0zx", banner_file.id, file_size); return; } ExtractBannerInformation(banner_file, is_bnr1); }