From 33c9731ecab25aeded7e35bea3cd8334ab612b9d Mon Sep 17 00:00:00 2001 From: Billy Laws Date: Thu, 2 Jun 2022 00:02:43 +0100 Subject: [PATCH] Implement IFileSystem::CreateDirectory --- app/src/main/cpp/skyline/services/fssrv/IFileSystem.cpp | 8 +++++++- app/src/main/cpp/skyline/services/fssrv/IFileSystem.h | 6 ++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/app/src/main/cpp/skyline/services/fssrv/IFileSystem.cpp b/app/src/main/cpp/skyline/services/fssrv/IFileSystem.cpp index 4dec4119..f8617d27 100644 --- a/app/src/main/cpp/skyline/services/fssrv/IFileSystem.cpp +++ b/app/src/main/cpp/skyline/services/fssrv/IFileSystem.cpp @@ -10,13 +10,19 @@ namespace skyline::service::fssrv { IFileSystem::IFileSystem(std::shared_ptr backing, const DeviceState &state, ServiceManager &manager) : backing(std::move(backing)), BaseService(state, manager) {} Result IFileSystem::CreateFile(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) { - std::string path(request.inputBuf.at(0).as_string(true)); + std::string path{request.inputBuf.at(0).as_string(true)}; auto mode{request.Pop()}; auto size{request.Pop()}; return backing->CreateFile(path, size) ? Result{} : result::PathDoesNotExist; } + Result IFileSystem::CreateDirectory(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) { + std::string path{request.inputBuf.at(0).as_string(true)}; + + return backing->CreateDirectory(path, true) ? Result{} : result::PathDoesNotExist; + } + Result IFileSystem::GetEntryType(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) { std::string path(request.inputBuf.at(0).as_string(true)); diff --git a/app/src/main/cpp/skyline/services/fssrv/IFileSystem.h b/app/src/main/cpp/skyline/services/fssrv/IFileSystem.h index ca099116..caa918f1 100644 --- a/app/src/main/cpp/skyline/services/fssrv/IFileSystem.h +++ b/app/src/main/cpp/skyline/services/fssrv/IFileSystem.h @@ -23,6 +23,11 @@ namespace skyline::service::fssrv { */ Result CreateFile(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response); + /** + * @brief Creates a directory at the specified path in the filesystem + */ + Result CreateDirectory(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response); + /** * @brief Queries the DirectoryEntryType of the given path * @url https://switchbrew.org/wiki/Filesystem_services#GetEntryType @@ -48,6 +53,7 @@ namespace skyline::service::fssrv { SERVICE_DECL( SFUNC(0x0, IFileSystem, CreateFile), + SFUNC(0x2, IFileSystem, CreateDirectory), SFUNC(0x7, IFileSystem, GetEntryType), SFUNC(0x8, IFileSystem, OpenFile), SFUNC(0x9, IFileSystem, OpenDirectory),