diff options
-rw-r--r-- | .github/workflows/verify.yml | 3 | ||||
-rw-r--r-- | src/core/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/core/file_sys/fs_save_data_types.h | 13 | ||||
-rw-r--r-- | src/core/hle/service/filesystem/fsp/fsp_srv.cpp | 20 | ||||
-rw-r--r-- | src/core/hle/service/filesystem/fsp/fsp_srv.h | 6 | ||||
-rw-r--r-- | src/core/hle/service/filesystem/fsp/save_data_transfer_prohibiter.cpp | 13 | ||||
-rw-r--r-- | src/core/hle/service/filesystem/fsp/save_data_transfer_prohibiter.h | 16 |
7 files changed, 69 insertions, 4 deletions
diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml index 2814d3cdb..13bde68c3 100644 --- a/.github/workflows/verify.yml +++ b/.github/workflows/verify.yml @@ -81,8 +81,7 @@ jobs: fetch-depth: 0 - name: Install dependencies run: | - # workaround for https://github.com/actions/setup-python/issues/577 - brew install autoconf automake boost@1.83 ccache ffmpeg fmt glslang hidapi libtool libusb lz4 ninja nlohmann-json openssl pkg-config qt@5 sdl2 speexdsp zlib zlib zstd || brew link --overwrite python@3.12 + brew install autoconf automake boost ccache ffmpeg fmt glslang hidapi libtool libusb lz4 ninja nlohmann-json openssl pkg-config qt@5 sdl2 speexdsp zlib zlib zstd - name: Build run: | mkdir build diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 0393eff33..75beacf70 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -623,6 +623,8 @@ add_library(core STATIC hle/service/filesystem/fsp/fsp_srv.cpp hle/service/filesystem/fsp/fsp_srv.h hle/service/filesystem/fsp/fsp_types.h + hle/service/filesystem/fsp/save_data_transfer_prohibiter.cpp + hle/service/filesystem/fsp/save_data_transfer_prohibiter.h hle/service/filesystem/romfs_controller.cpp hle/service/filesystem/romfs_controller.h hle/service/filesystem/save_data_controller.cpp diff --git a/src/core/file_sys/fs_save_data_types.h b/src/core/file_sys/fs_save_data_types.h index 86a83d217..493dba34f 100644 --- a/src/core/file_sys/fs_save_data_types.h +++ b/src/core/file_sys/fs_save_data_types.h @@ -164,6 +164,19 @@ static_assert(sizeof(SaveDataExtraData) == 0x200, "SaveDataExtraData has invalid static_assert(std::is_trivially_copyable_v<SaveDataExtraData>, "Data type must be trivially copyable."); +struct SaveDataFilter { + bool use_program_id; + bool use_save_data_type; + bool use_user_id; + bool use_save_data_id; + bool use_index; + SaveDataRank rank; + SaveDataAttribute attribute; +}; +static_assert(sizeof(SaveDataFilter) == 0x48, "SaveDataFilter has invalid size."); +static_assert(std::is_trivially_copyable_v<SaveDataFilter>, + "Data type must be trivially copyable."); + struct HashSalt { static constexpr size_t Size = 32; diff --git a/src/core/hle/service/filesystem/fsp/fsp_srv.cpp b/src/core/hle/service/filesystem/fsp/fsp_srv.cpp index 05869527d..223284255 100644 --- a/src/core/hle/service/filesystem/fsp/fsp_srv.cpp +++ b/src/core/hle/service/filesystem/fsp/fsp_srv.cpp @@ -34,6 +34,7 @@ #include "core/hle/service/filesystem/fsp/fs_i_save_data_info_reader.h" #include "core/hle/service/filesystem/fsp/fs_i_storage.h" #include "core/hle/service/filesystem/fsp/fsp_srv.h" +#include "core/hle/service/filesystem/fsp/save_data_transfer_prohibiter.h" #include "core/hle/service/filesystem/romfs_controller.h" #include "core/hle/service/filesystem/save_data_controller.h" #include "core/hle/service/hle_ipc.h" @@ -87,7 +88,7 @@ FSP_SRV::FSP_SRV(Core::System& system_) {64, nullptr, "OpenSaveDataInternalStorageFileSystem"}, {65, nullptr, "UpdateSaveDataMacForDebug"}, {66, nullptr, "WriteSaveDataFileSystemExtraData2"}, - {67, nullptr, "FindSaveDataWithFilter"}, + {67, D<&FSP_SRV::FindSaveDataWithFilter>, "FindSaveDataWithFilter"}, {68, nullptr, "OpenSaveDataInfoReaderBySaveDataFilter"}, {69, nullptr, "ReadSaveDataFileSystemExtraDataBySaveDataAttribute"}, {70, D<&FSP_SRV::WriteSaveDataFileSystemExtraDataBySaveDataAttribute>, "WriteSaveDataFileSystemExtraDataBySaveDataAttribute"}, @@ -95,7 +96,7 @@ FSP_SRV::FSP_SRV(Core::System& system_) {80, nullptr, "OpenSaveDataMetaFile"}, {81, nullptr, "OpenSaveDataTransferManager"}, {82, nullptr, "OpenSaveDataTransferManagerVersion2"}, - {83, nullptr, "OpenSaveDataTransferProhibiterForCloudBackUp"}, + {83, D<&FSP_SRV::OpenSaveDataTransferProhibiter>, "OpenSaveDataTransferProhibiter"}, {84, nullptr, "ListApplicationAccessibleSaveDataOwnerId"}, {85, nullptr, "OpenSaveDataTransferManagerForSaveDataRepair"}, {86, nullptr, "OpenSaveDataMover"}, @@ -308,6 +309,14 @@ Result FSP_SRV::OpenSaveDataInfoReaderOnlyCacheStorage( R_SUCCEED(); } +Result FSP_SRV::FindSaveDataWithFilter(Out<s64> out_count, + OutBuffer<BufferAttr_HipcMapAlias> out_buffer, + FileSys::SaveDataSpaceId space_id, + FileSys::SaveDataFilter filter) { + LOG_WARNING(Service_FS, "(STUBBED) called"); + R_THROW(FileSys::ResultTargetNotFound); +} + Result FSP_SRV::WriteSaveDataFileSystemExtraDataBySaveDataAttribute() { LOG_WARNING(Service_FS, "(STUBBED) called."); @@ -332,6 +341,13 @@ Result FSP_SRV::ReadSaveDataFileSystemExtraDataWithMaskBySaveDataAttribute( R_SUCCEED(); } +Result FSP_SRV::OpenSaveDataTransferProhibiter( + OutInterface<ISaveDataTransferProhibiter> out_prohibiter, u64 id) { + LOG_WARNING(Service_FS, "(STUBBED) called, id={:016X}", id); + *out_prohibiter = std::make_shared<ISaveDataTransferProhibiter>(system); + R_SUCCEED(); +} + Result FSP_SRV::OpenDataStorageByCurrentProcess(OutInterface<IStorage> out_interface) { LOG_DEBUG(Service_FS, "called"); diff --git a/src/core/hle/service/filesystem/fsp/fsp_srv.h b/src/core/hle/service/filesystem/fsp/fsp_srv.h index 79ba44355..83d9cb51c 100644 --- a/src/core/hle/service/filesystem/fsp/fsp_srv.h +++ b/src/core/hle/service/filesystem/fsp/fsp_srv.h @@ -25,6 +25,7 @@ class SaveDataController; class IFileSystem; class ISaveDataInfoReader; +class ISaveDataTransferProhibiter; class IStorage; class IMultiCommitManager; @@ -66,11 +67,16 @@ private: Result OpenSaveDataInfoReaderBySaveDataSpaceId(OutInterface<ISaveDataInfoReader> out_interface, FileSys::SaveDataSpaceId space); Result OpenSaveDataInfoReaderOnlyCacheStorage(OutInterface<ISaveDataInfoReader> out_interface); + Result FindSaveDataWithFilter(Out<s64> out_count, OutBuffer<BufferAttr_HipcMapAlias> out_buffer, + FileSys::SaveDataSpaceId space_id, + FileSys::SaveDataFilter filter); Result WriteSaveDataFileSystemExtraDataBySaveDataAttribute(); Result ReadSaveDataFileSystemExtraDataWithMaskBySaveDataAttribute( FileSys::SaveDataSpaceId space_id, FileSys::SaveDataAttribute attribute, InBuffer<BufferAttr_HipcMapAlias> mask_buffer, OutBuffer<BufferAttr_HipcMapAlias> out_buffer); + Result OpenSaveDataTransferProhibiter(OutInterface<ISaveDataTransferProhibiter> out_prohibiter, + u64 id); Result OpenDataStorageByCurrentProcess(OutInterface<IStorage> out_interface); Result OpenDataStorageByDataId(OutInterface<IStorage> out_interface, FileSys::StorageId storage_id, u32 unknown, u64 title_id); diff --git a/src/core/hle/service/filesystem/fsp/save_data_transfer_prohibiter.cpp b/src/core/hle/service/filesystem/fsp/save_data_transfer_prohibiter.cpp new file mode 100644 index 000000000..d8d6289fe --- /dev/null +++ b/src/core/hle/service/filesystem/fsp/save_data_transfer_prohibiter.cpp @@ -0,0 +1,13 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "core/hle/service/filesystem/fsp/save_data_transfer_prohibiter.h" + +namespace Service::FileSystem { + +ISaveDataTransferProhibiter::ISaveDataTransferProhibiter(Core::System& system_) + : ServiceFramework{system_, "ISaveDataTransferProhibiter"} {} + +ISaveDataTransferProhibiter::~ISaveDataTransferProhibiter() = default; + +} // namespace Service::FileSystem diff --git a/src/core/hle/service/filesystem/fsp/save_data_transfer_prohibiter.h b/src/core/hle/service/filesystem/fsp/save_data_transfer_prohibiter.h new file mode 100644 index 000000000..d206e1dea --- /dev/null +++ b/src/core/hle/service/filesystem/fsp/save_data_transfer_prohibiter.h @@ -0,0 +1,16 @@ +// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "core/hle/service/service.h" + +namespace Service::FileSystem { + +class ISaveDataTransferProhibiter : public ServiceFramework<ISaveDataTransferProhibiter> { +public: + explicit ISaveDataTransferProhibiter(Core::System& system_); + ~ISaveDataTransferProhibiter() override; +}; + +} // namespace Service::FileSystem |