fs: Add missing types and fix compilation problems

This commit is contained in:
FearlessTobi 2024-02-23 19:34:51 +01:00
parent b14f38946c
commit fe3fcb0730
12 changed files with 185 additions and 157 deletions

View File

@ -51,6 +51,7 @@ add_library(core STATIC
file_sys/control_metadata.cpp file_sys/control_metadata.cpp
file_sys/control_metadata.h file_sys/control_metadata.h
file_sys/errors.h file_sys/errors.h
file_sys/fs_common.h
file_sys/fs_directory.h file_sys/fs_directory.h
file_sys/fs_file.h file_sys/fs_file.h
file_sys/fs_filesystem.h file_sys/fs_filesystem.h
@ -58,17 +59,29 @@ add_library(core STATIC
file_sys/fs_operate_range.h file_sys/fs_operate_range.h
file_sys/fs_path.h file_sys/fs_path.h
file_sys/fs_path_utility.h file_sys/fs_path_utility.h
file_sys/fs_program_index_map_info.h
file_sys/fs_save_data_types.h file_sys/fs_save_data_types.h
file_sys/fs_string_util.h file_sys/fs_string_util.h
file_sys/fs_program_index_map_info.h
file_sys/fsa/fs_i_directory.h file_sys/fsa/fs_i_directory.h
file_sys/fsa/fs_i_file.h file_sys/fsa/fs_i_file.h
file_sys/fsa/fs_i_filesystem.h file_sys/fsa/fs_i_filesystem.h
file_sys/fsmitm_romfsbuild.cpp file_sys/fsmitm_romfsbuild.cpp
file_sys/fsmitm_romfsbuild.h file_sys/fsmitm_romfsbuild.h
file_sys/fssrv/fssrv_program_registry_impl.cpp
file_sys/fssrv/fssrv_program_registry_impl.h
file_sys/fssrv/fssrv_program_registry_service.cpp
file_sys/fssrv/fssrv_program_registry_service.h
file_sys/fssrv/fssrv_sf_path.h file_sys/fssrv/fssrv_sf_path.h
file_sys/fssrv/impl/fssrv_access_control.cpp
file_sys/fssrv/impl/fssrv_access_control.h
file_sys/fssrv/impl/fssrv_access_control_bits.h
file_sys/fssrv/impl/fssrv_program_index_map_info_manager.h
file_sys/fssrv/impl/fssrv_program_info.cpp
file_sys/fssrv/impl/fssrv_program_info.h
file_sys/fssrv/impl/fssrv_program_registry_manager.cpp
file_sys/fssrv/impl/fssrv_program_registry_manager.h
file_sys/fssrv/impl/fssrv_save_data_properties.h
file_sys/fssystem/fs_i_storage.h file_sys/fssystem/fs_i_storage.h
file_sys/fssystem/fs_types.h
file_sys/fssystem/fssystem_aes_ctr_counter_extended_storage.cpp file_sys/fssystem/fssystem_aes_ctr_counter_extended_storage.cpp
file_sys/fssystem/fssystem_aes_ctr_counter_extended_storage.h file_sys/fssystem/fssystem_aes_ctr_counter_extended_storage.h
file_sys/fssystem/fssystem_aes_ctr_storage.cpp file_sys/fssystem/fssystem_aes_ctr_storage.cpp
@ -110,19 +123,6 @@ add_library(core STATIC
file_sys/fssystem/fssystem_switch_storage.h file_sys/fssystem/fssystem_switch_storage.h
file_sys/fssystem/fssystem_utility.cpp file_sys/fssystem/fssystem_utility.cpp
file_sys/fssystem/fssystem_utility.h file_sys/fssystem/fssystem_utility.h
file_sys/fssrv/impl/fssrv_program_info.cpp
file_sys/fssrv/impl/fssrv_program_info.h
file_sys/fssrv/impl/fssrv_access_control.h
file_sys/fssrv/impl/fssrv_access_control.cpp
file_sys/fssrv/impl/fssrv_access_control_bits.h
file_sys/fssrv/impl/fssrv_program_registry_manager.cpp
file_sys/fssrv/impl/fssrv_program_registry_manager.h
file_sys/fssrv/impl/fssrv_program_index_map_info_manager.h
file_sys/fssrv/impl/fssrv_save_data_properties.h
file_sys/fssrv/fssrv_program_registry_impl.h
file_sys/fssrv/fssrv_program_registry_impl.cpp
file_sys/fssrv/fssrv_program_registry_service.h
file_sys/fssrv/fssrv_program_registry_service.cpp
file_sys/ips_layer.cpp file_sys/ips_layer.cpp
file_sys/ips_layer.h file_sys/ips_layer.h
file_sys/kernel_executable.cpp file_sys/kernel_executable.cpp
@ -510,33 +510,33 @@ add_library(core STATIC
hle/service/apm/apm_controller.h hle/service/apm/apm_controller.h
hle/service/apm/apm_interface.cpp hle/service/apm/apm_interface.cpp
hle/service/apm/apm_interface.h hle/service/apm/apm_interface.h
hle/service/audio/audio.cpp
hle/service/audio/audio.h
hle/service/audio/audio_controller.cpp hle/service/audio/audio_controller.cpp
hle/service/audio/audio_controller.h hle/service/audio/audio_controller.h
hle/service/audio/audio_device.cpp hle/service/audio/audio_device.cpp
hle/service/audio/audio_device.h hle/service/audio/audio_device.h
hle/service/audio/audio_in_manager.cpp
hle/service/audio/audio_in_manager.h
hle/service/audio/audio_in.cpp hle/service/audio/audio_in.cpp
hle/service/audio/audio_in.h hle/service/audio/audio_in.h
hle/service/audio/audio_out_manager.cpp hle/service/audio/audio_in_manager.cpp
hle/service/audio/audio_out_manager.h hle/service/audio/audio_in_manager.h
hle/service/audio/audio_out.cpp hle/service/audio/audio_out.cpp
hle/service/audio/audio_out.h hle/service/audio/audio_out.h
hle/service/audio/audio_renderer_manager.cpp hle/service/audio/audio_out_manager.cpp
hle/service/audio/audio_renderer_manager.h hle/service/audio/audio_out_manager.h
hle/service/audio/audio_renderer.cpp hle/service/audio/audio_renderer.cpp
hle/service/audio/audio_renderer.h hle/service/audio/audio_renderer.h
hle/service/audio/audio.cpp hle/service/audio/audio_renderer_manager.cpp
hle/service/audio/audio.h hle/service/audio/audio_renderer_manager.h
hle/service/audio/errors.h hle/service/audio/errors.h
hle/service/audio/final_output_recorder_manager_for_applet.cpp
hle/service/audio/final_output_recorder_manager_for_applet.h
hle/service/audio/final_output_recorder_manager.cpp hle/service/audio/final_output_recorder_manager.cpp
hle/service/audio/final_output_recorder_manager.h hle/service/audio/final_output_recorder_manager.h
hle/service/audio/hardware_opus_decoder_manager.cpp hle/service/audio/final_output_recorder_manager_for_applet.cpp
hle/service/audio/hardware_opus_decoder_manager.h hle/service/audio/final_output_recorder_manager_for_applet.h
hle/service/audio/hardware_opus_decoder.cpp hle/service/audio/hardware_opus_decoder.cpp
hle/service/audio/hardware_opus_decoder.h hle/service/audio/hardware_opus_decoder.h
hle/service/audio/hardware_opus_decoder_manager.cpp
hle/service/audio/hardware_opus_decoder_manager.h
hle/service/bcat/backend/backend.cpp hle/service/bcat/backend/backend.cpp
hle/service/bcat/backend/backend.h hle/service/bcat/backend/backend.h
hle/service/bcat/bcat.cpp hle/service/bcat/bcat.cpp
@ -628,14 +628,14 @@ add_library(core STATIC
hle/service/filesystem/fsp/fs_i_filesystem.h hle/service/filesystem/fsp/fs_i_filesystem.h
hle/service/filesystem/fsp/fs_i_multi_commit_manager.cpp hle/service/filesystem/fsp/fs_i_multi_commit_manager.cpp
hle/service/filesystem/fsp/fs_i_multi_commit_manager.h hle/service/filesystem/fsp/fs_i_multi_commit_manager.h
hle/service/filesystem/fsp/fs_i_program_registry.cpp
hle/service/filesystem/fsp/fs_i_program_registry.h
hle/service/filesystem/fsp/fs_i_save_data_info_reader.cpp hle/service/filesystem/fsp/fs_i_save_data_info_reader.cpp
hle/service/filesystem/fsp/fs_i_save_data_info_reader.h hle/service/filesystem/fsp/fs_i_save_data_info_reader.h
hle/service/filesystem/fsp/fs_i_storage.cpp hle/service/filesystem/fsp/fs_i_storage.cpp
hle/service/filesystem/fsp/fs_i_storage.h hle/service/filesystem/fsp/fs_i_storage.h
hle/service/filesystem/fsp/fsp_ldr.cpp hle/service/filesystem/fsp/fsp_ldr.cpp
hle/service/filesystem/fsp/fsp_ldr.h hle/service/filesystem/fsp/fsp_ldr.h
hle/service/filesystem/fsp/fs_i_program_registry.cpp
hle/service/filesystem/fsp/fs_i_program_registry.h
hle/service/filesystem/fsp/fsp_srv.cpp hle/service/filesystem/fsp/fsp_srv.cpp
hle/service/filesystem/fsp/fsp_srv.h hle/service/filesystem/fsp/fsp_srv.h
hle/service/filesystem/fsp/fsp_types.h hle/service/filesystem/fsp/fsp_types.h
@ -901,12 +901,12 @@ add_library(core STATIC
hle/service/olsc/daemon_controller.h hle/service/olsc/daemon_controller.h
hle/service/olsc/native_handle_holder.cpp hle/service/olsc/native_handle_holder.cpp
hle/service/olsc/native_handle_holder.h hle/service/olsc/native_handle_holder.h
hle/service/olsc/olsc.cpp
hle/service/olsc/olsc.h
hle/service/olsc/olsc_service_for_application.cpp hle/service/olsc/olsc_service_for_application.cpp
hle/service/olsc/olsc_service_for_application.h hle/service/olsc/olsc_service_for_application.h
hle/service/olsc/olsc_service_for_system_service.cpp hle/service/olsc/olsc_service_for_system_service.cpp
hle/service/olsc/olsc_service_for_system_service.h hle/service/olsc/olsc_service_for_system_service.h
hle/service/olsc/olsc.cpp
hle/service/olsc/olsc.h
hle/service/olsc/remote_storage_controller.cpp hle/service/olsc/remote_storage_controller.cpp
hle/service/olsc/remote_storage_controller.h hle/service/olsc/remote_storage_controller.h
hle/service/olsc/transfer_task_list_controller.cpp hle/service/olsc/transfer_task_list_controller.cpp
@ -930,10 +930,10 @@ add_library(core STATIC
hle/service/os/mutex.h hle/service/os/mutex.h
hle/service/pcie/pcie.cpp hle/service/pcie/pcie.cpp
hle/service/pcie/pcie.h hle/service/pcie/pcie.h
hle/service/pctl/parental_control_service_factory.cpp
hle/service/pctl/parental_control_service_factory.h
hle/service/pctl/parental_control_service.cpp hle/service/pctl/parental_control_service.cpp
hle/service/pctl/parental_control_service.h hle/service/pctl/parental_control_service.h
hle/service/pctl/parental_control_service_factory.cpp
hle/service/pctl/parental_control_service_factory.h
hle/service/pctl/pctl.cpp hle/service/pctl/pctl.cpp
hle/service/pctl/pctl.h hle/service/pctl/pctl.h
hle/service/pctl/pctl_results.h hle/service/pctl/pctl_results.h
@ -945,14 +945,14 @@ add_library(core STATIC
hle/service/prepo/prepo.cpp hle/service/prepo/prepo.cpp
hle/service/prepo/prepo.h hle/service/prepo/prepo.h
hle/service/psc/ovln/ovln_types.h hle/service/psc/ovln/ovln_types.h
hle/service/psc/ovln/receiver_service.cpp
hle/service/psc/ovln/receiver_service.h
hle/service/psc/ovln/receiver.cpp hle/service/psc/ovln/receiver.cpp
hle/service/psc/ovln/receiver.h hle/service/psc/ovln/receiver.h
hle/service/psc/ovln/sender_service.cpp hle/service/psc/ovln/receiver_service.cpp
hle/service/psc/ovln/sender_service.h hle/service/psc/ovln/receiver_service.h
hle/service/psc/ovln/sender.cpp hle/service/psc/ovln/sender.cpp
hle/service/psc/ovln/sender.h hle/service/psc/ovln/sender.h
hle/service/psc/ovln/sender_service.cpp
hle/service/psc/ovln/sender_service.h
hle/service/psc/pm_control.cpp hle/service/psc/pm_control.cpp
hle/service/psc/pm_control.h hle/service/psc/pm_control.h
hle/service/psc/pm_module.cpp hle/service/psc/pm_module.cpp

View File

@ -30,14 +30,6 @@ struct Int64 {
} }
}; };
struct HashSalt {
static constexpr size_t Size = 32;
std::array<u8, Size> value;
};
static_assert(std::is_trivial_v<HashSalt>);
static_assert(sizeof(HashSalt) == HashSalt::Size);
constexpr inline size_t IntegrityMinLayerCount = 2; constexpr inline size_t IntegrityMinLayerCount = 2;
constexpr inline size_t IntegrityMaxLayerCount = 7; constexpr inline size_t IntegrityMaxLayerCount = 7;
constexpr inline size_t IntegrityLayerCountSave = 5; constexpr inline size_t IntegrityLayerCountSave = 5;

View File

@ -41,6 +41,8 @@ enum class SaveDataRank : u8 {
Secondary = 1, Secondary = 1,
}; };
enum class SaveDataFormatType : u8 { Normal = 0, NoJournal = 1 };
struct SaveDataSize { struct SaveDataSize {
u64 normal; u64 normal;
u64 journal; u64 journal;
@ -68,28 +70,13 @@ enum class SaveDataMetaType : u8 {
ExtensionContext = 2, ExtensionContext = 2,
}; };
struct SaveDataMetaInfo { struct HashSalt {
u32 size; static constexpr size_t Size = 32;
SaveDataMetaType type;
INSERT_PADDING_BYTES(0xB);
};
static_assert(std::is_trivially_copyable_v<SaveDataMetaInfo>,
"Data type must be trivially copyable.");
static_assert(sizeof(SaveDataMetaInfo) == 0x10, "SaveDataMetaInfo has invalid size.");
struct SaveDataCreationInfo { std::array<u8, Size> value;
s64 size;
s64 journal_size;
s64 block_size;
u64 owner_id;
u32 flags;
SaveDataSpaceId space_id;
bool pseudo;
INSERT_PADDING_BYTES(0x1A);
}; };
static_assert(std::is_trivially_copyable_v<SaveDataCreationInfo>, static_assert(std::is_trivially_copyable_v<HashSalt>, "Data type must be trivially copyable.");
"Data type must be trivially copyable."); static_assert(sizeof(HashSalt) == HashSalt::Size);
static_assert(sizeof(SaveDataCreationInfo) == 0x40, "SaveDataCreationInfo has invalid size.");
struct SaveDataAttribute { struct SaveDataAttribute {
ProgramId program_id; ProgramId program_id;
@ -149,12 +136,73 @@ constexpr inline bool operator!=(const SaveDataAttribute& lhs, const SaveDataAtt
return !(lhs == rhs); return !(lhs == rhs);
} }
struct SaveDataMetaInfo {
u32 size;
SaveDataMetaType type;
INSERT_PADDING_BYTES(0xB);
};
static_assert(std::is_trivially_copyable_v<SaveDataMetaInfo>,
"Data type must be trivially copyable.");
static_assert(sizeof(SaveDataMetaInfo) == 0x10, "SaveDataMetaInfo has invalid size.");
struct SaveDataInfo {
u64_le save_id_unknown;
FileSys::SaveDataSpaceId space;
FileSys::SaveDataType type;
INSERT_PADDING_BYTES(0x6);
std::array<u8, 0x10> user_id;
u64_le save_id;
u64_le title_id;
u64_le save_image_size;
u16_le index;
FileSys::SaveDataRank rank;
INSERT_PADDING_BYTES(0x25);
};
static_assert(sizeof(SaveDataInfo) == 0x60, "SaveDataInfo has incorrect size.");
struct SaveDataCreationInfo {
s64 size;
s64 journal_size;
s64 block_size;
u64 owner_id;
u32 flags;
SaveDataSpaceId space_id;
bool pseudo;
INSERT_PADDING_BYTES(0x1A);
};
static_assert(std::is_trivially_copyable_v<SaveDataCreationInfo>,
"Data type must be trivially copyable.");
static_assert(sizeof(SaveDataCreationInfo) == 0x40, "SaveDataCreationInfo has invalid size.");
const u32 SaveDataCreationInfoV2Version = 0x00010000;
struct SaveDataCreationInfoV2 {
u32 version;
SaveDataAttribute attribute;
s64 size;
s64 journal_size;
s64 block_size;
u64 owner_id;
SaveDataFlags flags;
SaveDataSpaceId space_id;
SaveDataFormatType format_type;
INSERT_PADDING_BYTES(0x2);
bool is_hash_salt_enabled;
INSERT_PADDING_BYTES(0x3);
HashSalt hash_salt;
SaveDataMetaType meta_type;
INSERT_PADDING_BYTES(0x3);
s32 meta_size;
INSERT_PADDING_BYTES(0x164);
};
static_assert(sizeof(SaveDataCreationInfoV2) == 0x200,
"SaveDataCreationInfoV2 has incorrect size.");
struct SaveDataExtraData { struct SaveDataExtraData {
SaveDataAttribute attr; SaveDataAttribute attr;
u64 owner_id; u64 owner_id;
s64 timestamp; s64 timestamp;
u32 flags; u32 flags;
INSERT_PADDING_BYTES(4); INSERT_PADDING_BYTES(0x4);
s64 available_size; s64 available_size;
s64 journal_size; s64 journal_size;
s64 commit_id; s64 commit_id;

View File

@ -73,7 +73,7 @@ void InitializeInitialAndCurrentProcessId(Core::System& system) {
ASSERT(Svc::GetProcessId(system, std::addressof(g_current_process_id), ASSERT(Svc::GetProcessId(system, std::addressof(g_current_process_id),
Svc::PseudoHandle::CurrentProcess) == ResultSuccess); Svc::PseudoHandle::CurrentProcess) == ResultSuccess);
/* Set initialized. */ // Set initialized
g_initialized = true; g_initialized = true;
} }
} }

View File

@ -7,7 +7,7 @@
#include "common/assert.h" #include "common/assert.h"
#include "common/common_types.h" #include "common/common_types.h"
#include "core/file_sys/savedata_factory.h" #include "core/file_sys/fs_save_data_types.h"
namespace FileSys::FsSrv::Impl { namespace FileSys::FsSrv::Impl {
@ -30,13 +30,13 @@ public:
static bool IsJournalingSupported(SaveDataType type) { static bool IsJournalingSupported(SaveDataType type) {
switch (type) { switch (type) {
case SaveDataType::SystemSaveData: case SaveDataType::System:
case SaveDataType::SaveData: case SaveDataType::Account:
case SaveDataType::BcatDeliveryCacheStorage: case SaveDataType::Bcat:
case SaveDataType::DeviceSaveData: case SaveDataType::Device:
case SaveDataType::CacheStorage: case SaveDataType::Cache:
return true; return true;
case SaveDataType::TemporaryStorage: case SaveDataType::Temporary:
return false; return false;
default: default:
UNREACHABLE(); UNREACHABLE();
@ -46,13 +46,13 @@ public:
static bool IsMultiCommitSupported(SaveDataType type) { static bool IsMultiCommitSupported(SaveDataType type) {
switch (type) { switch (type) {
case SaveDataType::SystemSaveData: case SaveDataType::System:
case SaveDataType::SaveData: case SaveDataType::Account:
case SaveDataType::DeviceSaveData: case SaveDataType::Device:
return true; return true;
case SaveDataType::BcatDeliveryCacheStorage: case SaveDataType::Bcat:
case SaveDataType::TemporaryStorage: case SaveDataType::Temporary:
case SaveDataType::CacheStorage: case SaveDataType::Cache:
return false; return false;
default: default:
UNREACHABLE(); UNREACHABLE();
@ -62,13 +62,13 @@ public:
static bool IsSharedOpenNeeded(SaveDataType type) { static bool IsSharedOpenNeeded(SaveDataType type) {
switch (type) { switch (type) {
case SaveDataType::SystemSaveData: case SaveDataType::System:
case SaveDataType::BcatDeliveryCacheStorage: case SaveDataType::Bcat:
case SaveDataType::TemporaryStorage: case SaveDataType::Temporary:
case SaveDataType::CacheStorage: case SaveDataType::Cache:
return false; return false;
case SaveDataType::SaveData: case SaveDataType::Account:
case SaveDataType::DeviceSaveData: case SaveDataType::Device:
return true; return true;
default: default:
UNREACHABLE(); UNREACHABLE();
@ -78,13 +78,13 @@ public:
static bool CanUseIndexerReservedArea(SaveDataType type) { static bool CanUseIndexerReservedArea(SaveDataType type) {
switch (type) { switch (type) {
case SaveDataType::SystemSaveData: case SaveDataType::System:
return true; return true;
case SaveDataType::SaveData: case SaveDataType::Account:
case SaveDataType::BcatDeliveryCacheStorage: case SaveDataType::Bcat:
case SaveDataType::DeviceSaveData: case SaveDataType::Device:
case SaveDataType::TemporaryStorage: case SaveDataType::Temporary:
case SaveDataType::CacheStorage: case SaveDataType::Cache:
return false; return false;
default: default:
UNREACHABLE(); UNREACHABLE();
@ -94,13 +94,13 @@ public:
static bool IsSystemSaveData(SaveDataType type) { static bool IsSystemSaveData(SaveDataType type) {
switch (type) { switch (type) {
case SaveDataType::SystemSaveData: case SaveDataType::System:
return true; return true;
case SaveDataType::SaveData: case SaveDataType::Account:
case SaveDataType::BcatDeliveryCacheStorage: case SaveDataType::Bcat:
case SaveDataType::DeviceSaveData: case SaveDataType::Device:
case SaveDataType::TemporaryStorage: case SaveDataType::Temporary:
case SaveDataType::CacheStorage: case SaveDataType::Cache:
return false; return false;
default: default:
UNREACHABLE(); UNREACHABLE();
@ -117,13 +117,13 @@ public:
static bool IsWipingNeededAtCleanUp(const SaveDataInfo& info) { static bool IsWipingNeededAtCleanUp(const SaveDataInfo& info) {
switch (info.type) { switch (info.type) {
case SaveDataType::SystemSaveData: case SaveDataType::System:
break; break;
case SaveDataType::SaveData: case SaveDataType::Account:
case SaveDataType::BcatDeliveryCacheStorage: case SaveDataType::Bcat:
case SaveDataType::DeviceSaveData: case SaveDataType::Device:
case SaveDataType::TemporaryStorage: case SaveDataType::Temporary:
case SaveDataType::CacheStorage: case SaveDataType::Cache:
return true; return true;
default: default:
UNREACHABLE(); UNREACHABLE();
@ -146,14 +146,14 @@ public:
static bool IsValidSpaceIdForSaveDataMover(SaveDataType type, SaveDataSpaceId space_id) { static bool IsValidSpaceIdForSaveDataMover(SaveDataType type, SaveDataSpaceId space_id) {
switch (type) { switch (type) {
case SaveDataType::SystemSaveData: case SaveDataType::System:
case SaveDataType::SaveData: case SaveDataType::Account:
case SaveDataType::BcatDeliveryCacheStorage: case SaveDataType::Bcat:
case SaveDataType::DeviceSaveData: case SaveDataType::Device:
case SaveDataType::TemporaryStorage: case SaveDataType::Temporary:
return false; return false;
case SaveDataType::CacheStorage: case SaveDataType::Cache:
return space_id == SaveDataSpaceId::NandUser || space_id == SaveDataSpaceId::SdCardUser; return space_id == SaveDataSpaceId::User || space_id == SaveDataSpaceId::SdUser;
default: default:
UNREACHABLE(); UNREACHABLE();
return false; return false;
@ -162,26 +162,26 @@ public:
static bool IsReconstructible(SaveDataType type, SaveDataSpaceId space_id) { static bool IsReconstructible(SaveDataType type, SaveDataSpaceId space_id) {
switch (space_id) { switch (space_id) {
case SaveDataSpaceId::NandSystem: case SaveDataSpaceId::System:
case SaveDataSpaceId::NandUser: case SaveDataSpaceId::User:
case SaveDataSpaceId::ProperSystem: case SaveDataSpaceId::ProperSystem:
case SaveDataSpaceId::SafeMode: case SaveDataSpaceId::SafeMode:
switch (type) { switch (type) {
case SaveDataType::SystemSaveData: case SaveDataType::System:
case SaveDataType::SaveData: case SaveDataType::Account:
case SaveDataType::DeviceSaveData: case SaveDataType::Device:
return false; return false;
case SaveDataType::BcatDeliveryCacheStorage: case SaveDataType::Bcat:
case SaveDataType::TemporaryStorage: case SaveDataType::Temporary:
case SaveDataType::CacheStorage: case SaveDataType::Cache:
return true; return true;
default: default:
UNREACHABLE(); UNREACHABLE();
return false; return false;
} }
case SaveDataSpaceId::SdCardSystem: case SaveDataSpaceId::SdSystem:
case SaveDataSpaceId::TemporaryStorage: case SaveDataSpaceId::Temporary:
case SaveDataSpaceId::SdCardUser: case SaveDataSpaceId::SdUser:
return true; return true;
default: default:
UNREACHABLE(); UNREACHABLE();

View File

@ -4,8 +4,9 @@
#pragma once #pragma once
#include "common/alignment.h" #include "common/alignment.h"
#include "core/file_sys/fs_common.h"
#include "core/file_sys/fs_save_data_types.h"
#include "core/file_sys/fssystem/fs_i_storage.h" #include "core/file_sys/fssystem/fs_i_storage.h"
#include "core/file_sys/fssystem/fs_types.h"
#include "core/file_sys/fssystem/fssystem_alignment_matching_storage.h" #include "core/file_sys/fssystem/fssystem_alignment_matching_storage.h"
#include "core/file_sys/fssystem/fssystem_integrity_verification_storage.h" #include "core/file_sys/fssystem/fssystem_integrity_verification_storage.h"
#include "core/file_sys/vfs/vfs_offset.h" #include "core/file_sys/vfs/vfs_offset.h"

View File

@ -5,8 +5,8 @@
#include <optional> #include <optional>
#include "core/file_sys/fs_common.h"
#include "core/file_sys/fssystem/fs_i_storage.h" #include "core/file_sys/fssystem/fs_i_storage.h"
#include "core/file_sys/fssystem/fs_types.h"
namespace FileSys { namespace FileSys {

View File

@ -8,7 +8,7 @@
#include "common/literals.h" #include "common/literals.h"
#include "core/file_sys/errors.h" #include "core/file_sys/errors.h"
#include "core/file_sys/fssystem/fs_types.h" #include "core/file_sys/fs_common.h"
namespace FileSys { namespace FileSys {

View File

@ -37,7 +37,7 @@ static u64 stoull_be(std::string_view str) {
} }
Result ISaveDataInfoReader::ReadSaveDataInfo( Result ISaveDataInfoReader::ReadSaveDataInfo(
Out<u64> out_count, OutArray<SaveDataInfo, BufferAttr_HipcMapAlias> out_entries) { Out<u64> out_count, OutArray<FileSys::SaveDataInfo, BufferAttr_HipcMapAlias> out_entries) {
LOG_DEBUG(Service_FS, "called"); LOG_DEBUG(Service_FS, "called");
// Calculate how many entries we can fit in the output buffer // Calculate how many entries we can fit in the output buffer
@ -93,7 +93,7 @@ void ISaveDataInfoReader::FindNormalSaves(FileSys::SaveDataSpaceId space,
if (save_id_numeric != 0) { if (save_id_numeric != 0) {
// System Save Data // System Save Data
info.emplace_back(SaveDataInfo{ info.emplace_back(FileSys::SaveDataInfo{
0, 0,
space, space,
FileSys::SaveDataType::System, FileSys::SaveDataType::System,
@ -112,7 +112,7 @@ void ISaveDataInfoReader::FindNormalSaves(FileSys::SaveDataSpaceId space,
for (const auto& title_id : user_id->GetSubdirectories()) { for (const auto& title_id : user_id->GetSubdirectories()) {
const auto device = std::all_of(user_id_numeric.begin(), user_id_numeric.end(), const auto device = std::all_of(user_id_numeric.begin(), user_id_numeric.end(),
[](u8 val) { return val == 0; }); [](u8 val) { return val == 0; });
info.emplace_back(SaveDataInfo{ info.emplace_back(FileSys::SaveDataInfo{
0, 0,
space, space,
device ? FileSys::SaveDataType::Device : FileSys::SaveDataType::Account, device ? FileSys::SaveDataType::Device : FileSys::SaveDataType::Account,
@ -141,7 +141,7 @@ void ISaveDataInfoReader::FindTemporaryStorageSaves(FileSys::SaveDataSpaceId spa
auto user_id_numeric = Common::HexStringToArray<0x10>(user_id->GetName()); auto user_id_numeric = Common::HexStringToArray<0x10>(user_id->GetName());
std::reverse(user_id_numeric.begin(), user_id_numeric.end()); std::reverse(user_id_numeric.begin(), user_id_numeric.end());
info.emplace_back(SaveDataInfo{ info.emplace_back(FileSys::SaveDataInfo{
0, 0,
space, space,
FileSys::SaveDataType::Temporary, FileSys::SaveDataType::Temporary,

View File

@ -5,6 +5,7 @@
#include <vector> #include <vector>
#include "common/common_types.h" #include "common/common_types.h"
#include "core/file_sys/fs_save_data_types.h"
#include "core/hle/service/cmif_types.h" #include "core/hle/service/cmif_types.h"
#include "core/hle/service/service.h" #include "core/hle/service/service.h"
@ -19,23 +20,8 @@ public:
FileSys::SaveDataSpaceId space); FileSys::SaveDataSpaceId space);
~ISaveDataInfoReader() override; ~ISaveDataInfoReader() override;
struct SaveDataInfo {
u64_le save_id_unknown;
FileSys::SaveDataSpaceId space;
FileSys::SaveDataType type;
INSERT_PADDING_BYTES(0x6);
std::array<u8, 0x10> user_id;
u64_le save_id;
u64_le title_id;
u64_le save_image_size;
u16_le index;
FileSys::SaveDataRank rank;
INSERT_PADDING_BYTES(0x25);
};
static_assert(sizeof(SaveDataInfo) == 0x60, "SaveDataInfo has incorrect size.");
Result ReadSaveDataInfo(Out<u64> out_count, Result ReadSaveDataInfo(Out<u64> out_count,
OutArray<SaveDataInfo, BufferAttr_HipcMapAlias> out_entries); OutArray<FileSys::SaveDataInfo, BufferAttr_HipcMapAlias> out_entries);
private: private:
void FindAllSaves(FileSys::SaveDataSpaceId space); void FindAllSaves(FileSys::SaveDataSpaceId space);
@ -43,7 +29,7 @@ private:
void FindTemporaryStorageSaves(FileSys::SaveDataSpaceId space, const FileSys::VirtualDir& type); void FindTemporaryStorageSaves(FileSys::SaveDataSpaceId space, const FileSys::VirtualDir& type);
std::shared_ptr<SaveDataController> save_data_controller; std::shared_ptr<SaveDataController> save_data_controller;
std::vector<SaveDataInfo> info; std::vector<FileSys::SaveDataInfo> info;
u64 next_entry_index = 0; u64 next_entry_index = 0;
}; };

View File

@ -225,23 +225,23 @@ Result FSP_SRV::OpenSdCardFileSystem(OutInterface<IFileSystem> out_interface) {
R_SUCCEED(); R_SUCCEED();
} }
Result FSP_SRV::CreateSaveDataFileSystem(FileSys::SaveDataCreationInfo save_create_struct, Result FSP_SRV::CreateSaveDataFileSystem(FileSys::SaveDataMetaInfo meta_info,
FileSys::SaveDataAttribute save_struct, u128 uid) { FileSys::SaveDataCreationInfo creation_info,
LOG_DEBUG(Service_FS, "called save_struct = {}, uid = {:016X}{:016X}", save_struct.DebugInfo(), FileSys::SaveDataAttribute attribute) {
uid[1], uid[0]); LOG_DEBUG(Service_FS, "called save_struct = {}", attribute.DebugInfo());
FileSys::VirtualDir save_data_dir{}; FileSys::VirtualDir save_data_dir{};
R_RETURN(save_data_controller->CreateSaveData(&save_data_dir, FileSys::SaveDataSpaceId::User, R_RETURN(save_data_controller->CreateSaveData(&save_data_dir, FileSys::SaveDataSpaceId::User,
save_struct)); attribute));
} }
Result FSP_SRV::CreateSaveDataFileSystemBySystemSaveDataId( Result FSP_SRV::CreateSaveDataFileSystemBySystemSaveDataId(
FileSys::SaveDataAttribute save_struct, FileSys::SaveDataCreationInfo save_create_struct) { FileSys::SaveDataAttribute attribute, FileSys::SaveDataCreationInfo save_create_struct) {
LOG_DEBUG(Service_FS, "called save_struct = {}", save_struct.DebugInfo()); LOG_DEBUG(Service_FS, "called save_struct = {}", attribute.DebugInfo());
FileSys::VirtualDir save_data_dir{}; FileSys::VirtualDir save_data_dir{};
R_RETURN(save_data_controller->CreateSaveData(&save_data_dir, FileSys::SaveDataSpaceId::System, R_RETURN(save_data_controller->CreateSaveData(&save_data_dir, FileSys::SaveDataSpaceId::System,
save_struct)); attribute));
} }
Result FSP_SRV::OpenSaveDataFileSystem(OutInterface<IFileSystem> out_interface, Result FSP_SRV::OpenSaveDataFileSystem(OutInterface<IFileSystem> out_interface,

View File

@ -51,10 +51,11 @@ private:
Result OpenFileSystemWithPatch(OutInterface<IFileSystem> out_interface, Result OpenFileSystemWithPatch(OutInterface<IFileSystem> out_interface,
FileSystemProxyType type, u64 open_program_id); FileSystemProxyType type, u64 open_program_id);
Result OpenSdCardFileSystem(OutInterface<IFileSystem> out_interface); Result OpenSdCardFileSystem(OutInterface<IFileSystem> out_interface);
Result CreateSaveDataFileSystem(FileSys::SaveDataCreationInfo save_create_struct, Result CreateSaveDataFileSystem(FileSys::SaveDataMetaInfo meta_info,
FileSys::SaveDataAttribute save_struct, u128 uid); FileSys::SaveDataCreationInfo creation_info,
FileSys::SaveDataAttribute attribute);
Result CreateSaveDataFileSystemBySystemSaveDataId( Result CreateSaveDataFileSystemBySystemSaveDataId(
FileSys::SaveDataAttribute save_struct, FileSys::SaveDataCreationInfo save_create_struct); FileSys::SaveDataAttribute attribute, FileSys::SaveDataCreationInfo save_create_struct);
Result OpenSaveDataFileSystem(OutInterface<IFileSystem> out_interface, Result OpenSaveDataFileSystem(OutInterface<IFileSystem> out_interface,
FileSys::SaveDataSpaceId space_id, FileSys::SaveDataSpaceId space_id,
FileSys::SaveDataAttribute attribute); FileSys::SaveDataAttribute attribute);