From 64d968240d302c2beb64a77fadd4c60d0b6bd77a Mon Sep 17 00:00:00 2001 From: Morph <39850852+Morph1984@users.noreply.github.com> Date: Tue, 1 Mar 2022 13:56:44 -0500 Subject: [PATCH] fs: Add fsOpenSaveDataInfoReaderWithFilter --- nx/include/switch/services/fs.h | 14 ++++++++++++++ nx/source/services/fs.c | 13 +++++++++++++ 2 files changed, 27 insertions(+) diff --git a/nx/include/switch/services/fs.h b/nx/include/switch/services/fs.h index aef317b5..fd11c90f 100644 --- a/nx/include/switch/services/fs.h +++ b/nx/include/switch/services/fs.h @@ -122,6 +122,18 @@ typedef struct { u8 unk_x3b[0x25]; ///< Unknown. Usually zeros? } FsSaveDataInfo; +/// SaveDataFilter +typedef struct { + bool filter_by_application_id; ///< Filter by \ref FsSaveDataAttribute::application_id + bool filter_by_save_data_type; ///< Filter by \ref FsSaveDataAttribute::save_data_type + bool filter_by_user_id; ///< Filter by \ref FsSaveDataAttribute::uid + bool filter_by_system_save_data_id; ///< Filter by \ref FsSaveDataAttribute::system_save_data_id + bool filter_by_index; ///< Filter by \ref FsSaveDataAttribute::save_data_index + u8 save_data_rank; ///< \ref FsSaveDataRank + u8 padding[0x2]; ///< Padding + FsSaveDataAttribute attr; ///< \ref FsSaveDataAttribute +} FsSaveDataFilter; + typedef struct { u64 created; ///< POSIX timestamp. u64 modified; ///< POSIX timestamp. @@ -368,6 +380,8 @@ Result fsWriteSaveDataFileSystemExtraData(const void* buf, size_t len, FsSaveDat Result fsOpenSaveDataInfoReader(FsSaveDataInfoReader* out, FsSaveDataSpaceId save_data_space_id); +Result fsOpenSaveDataInfoReaderWithFilter(FsSaveDataInfoReader* out, FsSaveDataSpaceId save_data_space_id, const FsSaveDataFilter *save_data_filter); ///< [6.0.0+] + Result fsOpenImageDirectoryFileSystem(FsFileSystem* out, FsImageDirectoryId image_directory_id); Result fsOpenContentStorageFileSystem(FsFileSystem* out, FsContentStorageId content_storage_id); Result fsOpenCustomStorageFileSystem(FsFileSystem* out, FsCustomStorageId custom_storage_id); ///< [7.0.0+] diff --git a/nx/source/services/fs.c b/nx/source/services/fs.c index d7bc8399..527d612a 100644 --- a/nx/source/services/fs.c +++ b/nx/source/services/fs.c @@ -434,6 +434,19 @@ Result fsOpenSaveDataInfoReader(FsSaveDataInfoReader* out, FsSaveDataSpaceId sav } } +Result fsOpenSaveDataInfoReaderWithFilter(FsSaveDataInfoReader* out, FsSaveDataSpaceId save_data_space_id, const FsSaveDataFilter *save_data_filter) { + const struct { + u8 save_data_space_id; + u8 pad[7]; + FsSaveDataFilter save_data_filter; + } in = { (u8)save_data_space_id, {0}, *save_data_filter }; + + return _fsObjectDispatchIn(&g_fsSrv, 68, in, + .out_num_objects = 1, + .out_objects = &out->s, + ); +} + Result fsOpenImageDirectoryFileSystem(FsFileSystem* out, FsImageDirectoryId image_directory_id) { u32 tmp=image_directory_id; return _fsObjectDispatchIn(&g_fsSrv, 100, tmp,