summaryrefslogtreecommitdiffstats
path: root/src/core/hle/service/fs/fs_user.cpp
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2014-12-21 07:45:00 +0100
committerbunnei <bunneidev@gmail.com>2014-12-21 07:45:00 +0100
commit572ce043c291f46f50d97f68f4df4f6f93e72035 (patch)
tree79a59fa757424e053b029b6162937551a03d1e25 /src/core/hle/service/fs/fs_user.cpp
parentMerge pull request #323 from lioncash/saddsub (diff)
parentAdded CreateFile to the FS_USER service (diff)
downloadyuzu-572ce043c291f46f50d97f68f4df4f6f93e72035.tar
yuzu-572ce043c291f46f50d97f68f4df4f6f93e72035.tar.gz
yuzu-572ce043c291f46f50d97f68f4df4f6f93e72035.tar.bz2
yuzu-572ce043c291f46f50d97f68f4df4f6f93e72035.tar.lz
yuzu-572ce043c291f46f50d97f68f4df4f6f93e72035.tar.xz
yuzu-572ce043c291f46f50d97f68f4df4f6f93e72035.tar.zst
yuzu-572ce043c291f46f50d97f68f4df4f6f93e72035.zip
Diffstat (limited to 'src/core/hle/service/fs/fs_user.cpp')
-rw-r--r--src/core/hle/service/fs/fs_user.cpp31
1 files changed, 30 insertions, 1 deletions
diff --git a/src/core/hle/service/fs/fs_user.cpp b/src/core/hle/service/fs/fs_user.cpp
index 8b908d691..1402abe83 100644
--- a/src/core/hle/service/fs/fs_user.cpp
+++ b/src/core/hle/service/fs/fs_user.cpp
@@ -226,6 +226,35 @@ static void DeleteDirectory(Service::Interface* self) {
}
/*
+ * FS_User::CreateFile service function
+ * Inputs:
+ * 0 : Command header 0x08080202
+ * 2 : Archive handle lower word
+ * 3 : Archive handle upper word
+ * 4 : File path string type
+ * 5 : File path string size
+ * 7 : File size (filled with zeroes)
+ * 10: File path string data
+ * Outputs:
+ * 1 : Result of function, 0 on success, otherwise error code
+ */
+static void CreateFile(Service::Interface* self) {
+ u32* cmd_buff = Kernel::GetCommandBuffer();
+
+ ArchiveHandle archive_handle = MakeArchiveHandle(cmd_buff[2], cmd_buff[3]);
+ auto filename_type = static_cast<FileSys::LowPathType>(cmd_buff[4]);
+ u32 filename_size = cmd_buff[5];
+ u32 file_size = cmd_buff[7];
+ u32 filename_ptr = cmd_buff[10];
+
+ FileSys::Path file_path(filename_type, filename_size, filename_ptr);
+
+ LOG_DEBUG(Service_FS, "type=%d size=%d data=%s", filename_type, filename_size, file_path.DebugStr().c_str());
+
+ cmd_buff[1] = CreateFileInArchive(archive_handle, file_path, file_size).raw;
+}
+
+/*
* FS_User::CreateDirectory service function
* Inputs:
* 2 : Archive handle lower word
@@ -465,7 +494,7 @@ const FSUserInterface::FunctionInfo FunctionTable[] = {
{0x08050244, RenameFile, "RenameFile"},
{0x08060142, DeleteDirectory, "DeleteDirectory"},
{0x08070142, nullptr, "DeleteDirectoryRecursively"},
- {0x08080202, nullptr, "CreateFile"},
+ {0x08080202, CreateFile, "CreateFile"},
{0x08090182, CreateDirectory, "CreateDirectory"},
{0x080A0244, RenameDirectory, "RenameDirectory"},
{0x080B0102, OpenDirectory, "OpenDirectory"},