Просмотр исходного кода

Merge pull request #559 from Subv/mount_savedata

Services/FS: Return the correct error code when trying to mount a nonexistent savedata.
bunnei 8 лет назад
Родитель
Сommit
7230ceb584
2 измененных файлов с 12 добавлено и 2 удалено
  1. 1 0
      src/core/file_sys/errors.h
  2. 11 2
      src/core/hle/service/filesystem/fsp_srv.cpp

+ 1 - 0
src/core/file_sys/errors.h

@@ -11,6 +11,7 @@ namespace FileSys {
 namespace ErrCodes {
 enum {
     NotFound = 1,
+    SaveDataNotFound = 1002,
 };
 }
 

+ 11 - 2
src/core/hle/service/filesystem/fsp_srv.cpp

@@ -7,6 +7,7 @@
 #include "common/string_util.h"
 #include "core/core.h"
 #include "core/file_sys/directory.h"
+#include "core/file_sys/errors.h"
 #include "core/file_sys/filesystem.h"
 #include "core/file_sys/storage.h"
 #include "core/hle/ipc_helpers.h"
@@ -531,12 +532,20 @@ void FSP_SRV::CreateSaveData(Kernel::HLERequestContext& ctx) {
 void FSP_SRV::MountSaveData(Kernel::HLERequestContext& ctx) {
     LOG_WARNING(Service_FS, "(STUBBED) called");
 
+    // TODO(Subv): Read the input parameters and mount the requested savedata instead of always
+    // mounting the current process' savedata.
     FileSys::Path unused;
-    auto filesystem = OpenFileSystem(Type::SaveData, unused).Unwrap();
+    auto filesystem = OpenFileSystem(Type::SaveData, unused);
+
+    if (filesystem.Failed()) {
+        IPC::ResponseBuilder rb{ctx, 2, 0, 0};
+        rb.Push(ResultCode(ErrorModule::FS, FileSys::ErrCodes::SaveDataNotFound));
+        return;
+    }
 
     IPC::ResponseBuilder rb{ctx, 2, 0, 1};
     rb.Push(RESULT_SUCCESS);
-    rb.PushIpcInterface<IFileSystem>(std::move(filesystem));
+    rb.PushIpcInterface<IFileSystem>(std::move(filesystem.Unwrap()));
 }
 
 void FSP_SRV::GetGlobalAccessLogMode(Kernel::HLERequestContext& ctx) {