romfs.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. // Copyright 2018 yuzu emulator team
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #pragma once
  5. #include <array>
  6. #include <map>
  7. #include "common/common_funcs.h"
  8. #include "common/common_types.h"
  9. #include "common/swap.h"
  10. #include "core/file_sys/vfs.h"
  11. namespace FileSys {
  12. struct RomFSHeader;
  13. struct IVFCLevel {
  14. u64_le offset;
  15. u64_le size;
  16. u32_le block_size;
  17. u32_le reserved;
  18. };
  19. static_assert(sizeof(IVFCLevel) == 0x18, "IVFCLevel has incorrect size.");
  20. struct IVFCHeader {
  21. u32_le magic;
  22. u32_le magic_number;
  23. INSERT_PADDING_BYTES(8);
  24. std::array<IVFCLevel, 6> levels;
  25. INSERT_PADDING_BYTES(64);
  26. };
  27. static_assert(sizeof(IVFCHeader) == 0xE0, "IVFCHeader has incorrect size.");
  28. enum class RomFSExtractionType {
  29. Full, // Includes data directory
  30. Truncated, // Traverses into data directory
  31. };
  32. // Converts a RomFS binary blob to VFS Filesystem
  33. // Returns nullptr on failure
  34. VirtualDir ExtractRomFS(VirtualFile file,
  35. RomFSExtractionType type = RomFSExtractionType::Truncated);
  36. // Converts a VFS filesystem into a RomFS binary
  37. // Returns nullptr on failure
  38. VirtualFile CreateRomFS(VirtualDir dir);
  39. } // namespace FileSys