Esempio n. 1
0
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);
}
Esempio n. 2
0
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);
}