diff options
author | FearlessTobi <thm.frey@gmail.com> | 2024-02-10 20:58:43 +0100 |
---|---|---|
committer | FearlessTobi <thm.frey@gmail.com> | 2024-02-19 19:20:46 +0100 |
commit | 934e420e36e817c673a839e2a417785906bfe91c (patch) | |
tree | 13777628e911468f88ed928d0bfa6f4a3d416f10 /src/core/hle/service/filesystem/fsp/fs_i_directory.cpp | |
parent | fs: Add FileSystemAccessor classes (diff) | |
download | yuzu-934e420e36e817c673a839e2a417785906bfe91c.tar yuzu-934e420e36e817c673a839e2a417785906bfe91c.tar.gz yuzu-934e420e36e817c673a839e2a417785906bfe91c.tar.bz2 yuzu-934e420e36e817c673a839e2a417785906bfe91c.tar.lz yuzu-934e420e36e817c673a839e2a417785906bfe91c.tar.xz yuzu-934e420e36e817c673a839e2a417785906bfe91c.tar.zst yuzu-934e420e36e817c673a839e2a417785906bfe91c.zip |
Diffstat (limited to 'src/core/hle/service/filesystem/fsp/fs_i_directory.cpp')
-rw-r--r-- | src/core/hle/service/filesystem/fsp/fs_i_directory.cpp | 32 |
1 files changed, 9 insertions, 23 deletions
diff --git a/src/core/hle/service/filesystem/fsp/fs_i_directory.cpp b/src/core/hle/service/filesystem/fsp/fs_i_directory.cpp index 661da5326..8483394d0 100644 --- a/src/core/hle/service/filesystem/fsp/fs_i_directory.cpp +++ b/src/core/hle/service/filesystem/fsp/fs_i_directory.cpp @@ -3,8 +3,8 @@ #include "core/file_sys/fs_filesystem.h" #include "core/file_sys/savedata_factory.h" +#include "core/hle/service/cmif_serialization.h" #include "core/hle/service/filesystem/fsp/fs_i_directory.h" -#include "core/hle/service/ipc_helpers.h" namespace Service::FileSystem { @@ -13,38 +13,24 @@ IDirectory::IDirectory(Core::System& system_, FileSys::VirtualDir directory_, : ServiceFramework{system_, "IDirectory"}, backend(std::make_unique<FileSys::Fsa::IDirectory>(directory_, mode)) { static const FunctionInfo functions[] = { - {0, &IDirectory::Read, "Read"}, - {1, &IDirectory::GetEntryCount, "GetEntryCount"}, + {0, D<&IDirectory::Read>, "Read"}, + {1, D<&IDirectory::GetEntryCount>, "GetEntryCount"}, }; RegisterHandlers(functions); } -void IDirectory::Read(HLERequestContext& ctx) { +Result IDirectory::Read( + Out<s64> out_count, + const OutArray<FileSys::DirectoryEntry, BufferAttr_HipcMapAlias> out_entries) { LOG_DEBUG(Service_FS, "called."); - // Calculate how many entries we can fit in the output buffer - const u64 count_entries = ctx.GetWriteBufferNumElements<FileSys::DirectoryEntry>(); - - s64 out_count{}; - FileSys::DirectoryEntry* out_entries = nullptr; - const auto result = backend->Read(&out_count, out_entries, count_entries); - - // Write the data to memory - ctx.WriteBuffer(out_entries, out_count); - - IPC::ResponseBuilder rb{ctx, 4}; - rb.Push(result); - rb.Push(out_count); + R_RETURN(backend->Read(out_count, out_entries.data(), out_entries.size())); } -void IDirectory::GetEntryCount(HLERequestContext& ctx) { +Result IDirectory::GetEntryCount(Out<s64> out_count) { LOG_DEBUG(Service_FS, "called"); - s64 out_count{}; - - IPC::ResponseBuilder rb{ctx, 4}; - rb.Push(backend->GetEntryCount(&out_count)); - rb.Push(out_count); + R_RETURN(backend->GetEntryCount(out_count)); } } // namespace Service::FileSystem |