romfs.h 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  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. SingleDiscard, // Traverses into the first subdirectory of root
  32. };
  33. // Converts a RomFS binary blob to VFS Filesystem
  34. // Returns nullptr on failure
  35. VirtualDir ExtractRomFS(VirtualFile file,
  36. RomFSExtractionType type = RomFSExtractionType::Truncated);
  37. // Converts a VFS filesystem into a RomFS binary
  38. // Returns nullptr on failure
  39. VirtualFile CreateRomFS(VirtualDir dir, VirtualDir ext = nullptr);
  40. } // namespace FileSys